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? 的错误参数类型传递给 completionHandlerError? 不是 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)

...