【问题标题】:completionHandler - Type of expression is ambiguous without more contextcompletionHandler - 表达式类型不明确,没有更多上下文
【发布时间】:2021-05-17 19:29:22
【问题描述】:

我有以下代码,我收到 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
    }
}

【问题讨论】:

    标签: ios swift completionhandler


    【解决方案1】:

    您将 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)
    
    ...
    

    【讨论】:

    • 谢谢,我现在知道出了什么问题。枚举也很清楚,但是我需要通过 completionHandler 将 NSLocalizedDescriptionKey 作为含义信息返回。如果可能,我们如何将 NSLocalizedDescriptionKey 添加到枚举中?
    • 您不能将NSLocalizedDescriptionKey 添加到枚举中。您可以使用rawValue 提取枚举描述,在这种情况下badURL.rawValue 将返回“Bad URL”String
    • @Raymond 更新了我的答案,可能 NSLocalizedDescriptionKey 包含在枚举错误中
    猜你喜欢
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2019-02-01
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多