Type of expression is ambiguous without more contextType of expression is ambiguous without more context
이 에러는 wrong argument 문제이다. 때문에 메서드를 이용하는 부분에서 문제가 생길 여지가 많다.
문제상황
내 경우에는 이 에러는 swicth에서 result를 이용해 success case, failure case를 두고 상황별로 동작을 정의하던 중에 발생했다. success에서는 let data를 생성하여 행동을 정의했고 failure에서는 let error를 만들고 그냥 break로 임시로 처리를 해놨다.
public func configure(with viewModel: XYZViewModel) {
viewModel.fetchImage { [weak self] result in
switch result {
case .success(let data):
DispatchQueue.main.async {
self?.imageView.image = UIImage(data: data)
}
case .failure(let error):
break
}
}
}
그런데 이렇게 할 경우 작은 문제가 발생하는데 error를 왜 안 쓰냐고 warning을 한다는 점이다.Lint를 이용 중이면 너무 귀찮게 하니까 그냥 let error를 지웠다.
case .failure():
break
이게 문제의 원인이었다. 이렇게 해놓으면 정상적인 switch의 사용방법이 아닌 모호한 표현이 되어버린다. 우리가 failure일 경우에 사용하는 객체를 만들어 처리한다고 컴파일러에게 암시한 상황에서 생성도 안 하고 사용도 안 하는 상황인 거다.
해결
많은 버그가 그렇듯이 해결은 간단하다. 그냥 인스턴스 생성해서 사용할 거 아니면 그냥 아래와 같이 failure만 적자
public func configure(with viewModel: XYZViewModel) {
viewModel.fetchImage { [weak self] result in
switch result {
case .success(let data):
DispatchQueue.main.async {
self?.imageView.image = UIImage(data: data)
}
case .failure:
break
}
}
}
'Swift > etc' 카테고리의 다른 글
[Xcode] 디버거에서 data 타입을 사람이 볼 수 있는 방식으로 변환하는 법 (0) | 2023.03.18 |
---|---|
[UIKit] init(frame:)과 init(coder:)은 어떤 차이가 있는가? (0) | 2023.03.16 |
[Swift] self와 Self의 차이점 (0) | 2023.03.11 |
[Swift] UserDefaults 사용법 정리 (0) | 2022.09.17 |
[Swift] 이중 배열과 관련된 "Fatal error: Index out of range" 문제 (0) | 2022.07.10 |