completionHandler - 表达式类型不明确,没有更多上下文

Ray*_*ond 2 ios completionhandler swift

我遵循代码,但收到completionHandler 错误

没有更多上下文,表达类型不明确

据我了解,这是由于completionHandler 不匹配造成的。如何为completionHandler 返回错误的字符串/有意义的详细信息?

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
    }
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*kis 5

Error?您为to传递了错误的参数类型completionHandlerError?不是一个String


要解决此问题,请创建NSError并使用它而不是String

let error = NSError(domain: "com.myAppPackageName", code: 1, userInfo: [
    NSLocalizedDescriptionKey : "Bad URL"
])
completionHandler(nil, error)
Run Code Online (Sandbox Code Playgroud)

或者创建自定义错误枚举类型:

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)

...
Run Code Online (Sandbox Code Playgroud)