completionHandler - 表达式类型在没有更多上下文的情况下不明确
completionHandler - Type of expression is ambiguous without more context
我遵循了代码,但我收到了 completionHandler 的错误
表达式类型不明确,没有更多上下文
我了解这是由于 completionHandler 不匹配造成的。我如何 return completionHandler 的 string/meaningful 详细信息出错?
func fetch(urlString: String, completionHandler: @escaping (T?, Error?) -> Void) -> Void {
//...
guard let url = URL(string: urlString) else {
print("Failed to create URL!")
DispatchQueue.main.async {
completionHandler(nil, "Bad URL") // gives error: Type of expression is ambiguous without more context
}
return
}
}
您将 Error?
的错误参数类型传递给 completionHandler
。 Error?
不是 String
。
要解决此问题,请创建一个 NSError
并使用它代替 String
:
let error = NSError(domain: "com.myAppPackageName", code: 1, userInfo: [
NSLocalizedDescriptionKey : "Bad URL"
])
completionHandler(nil, error)
或创建自定义错误枚举类型:
enum Error: String, Swift.Error {
case badURL = "Bad URL"
private var errorCode: Int {
switch self {
case .badURL:
return 100 // your error code
}
}
var foundationError: NSError {
return NSError(domain: "com.myAppPackageName", code: errorCode, userInfo: [
NSLocalizedDescriptionKey : self.rawValue
])
}
}
...
completionHandler(nil, Error.badURL.foundationError)
...
我遵循了代码,但我收到了 completionHandler 的错误
表达式类型不明确,没有更多上下文
我了解这是由于 completionHandler 不匹配造成的。我如何 return completionHandler 的 string/meaningful 详细信息出错?
func fetch(urlString: String, completionHandler: @escaping (T?, Error?) -> Void) -> Void {
//...
guard let url = URL(string: urlString) else {
print("Failed to create URL!")
DispatchQueue.main.async {
completionHandler(nil, "Bad URL") // gives error: Type of expression is ambiguous without more context
}
return
}
}
您将 Error?
的错误参数类型传递给 completionHandler
。 Error?
不是 String
。
要解决此问题,请创建一个 NSError
并使用它代替 String
:
let error = NSError(domain: "com.myAppPackageName", code: 1, userInfo: [
NSLocalizedDescriptionKey : "Bad URL"
])
completionHandler(nil, error)
或创建自定义错误枚举类型:
enum Error: String, Swift.Error {
case badURL = "Bad URL"
private var errorCode: Int {
switch self {
case .badURL:
return 100 // your error code
}
}
var foundationError: NSError {
return NSError(domain: "com.myAppPackageName", code: errorCode, userInfo: [
NSLocalizedDescriptionKey : self.rawValue
])
}
}
...
completionHandler(nil, Error.badURL.foundationError)
...