Swift 中的实例方法错误消息调用中没有完全匹配

No exact matches in call to instance method error message in Swift

我以前从来没有得到过,Swift中的这个错误信息是什么意思:

No exact matches in call to instance method 'dataTask(with:completionHandler:)'

这是我的代码块:

var request: NSMutableURLRequest? = nil
let task = URLSession.shared.dataTask(
            with: request,
            completionHandler: { data, response, error in
                DispatchQueue.main.async(execute: {
                  /// ...
                })
            })
        task.resume()

错误报告

通过 feedbackassistant.apple.com 报告:FB7717686

为什么Xcode大喊大叫?

也许消息文本看起来有点不言自明但仅仅因为Xcode没有准确指向参数本身,第一次有点难以理解时间.

Xcode 大喊大叫,因为该方法想要在方法调用中查看 确切的参数类型,这很容易。

示例案例的解决方案:

var request: URLRequest? = nil

let task = URLSession.shared.dataTask(
            with: request!,
            completionHandler: { data, response, error in
                DispatchQueue.main.async(execute: {

                })
            })
        task.resume()

刚用过URLRequest instead of the NSMutableURLRequest.

Swift 的解决方案UI 示例

我们假设这是您的 UI:

        ZStack() {
            Image(systemName: "photo")
                .resizable()
                .aspectRatio(contentMode: .fit)
                .background(Color.green)
                .foregroundColor(Color.white)
                .cornerRadius(12)
            Text(getToday())
                .font(.headline)
            }
        }

这是您在 Text(...) 中调用的方法:

    func getToday() -> Any?
    {
        let now = Date()
        let calendar = Calendar.current
        let components = calendar.dateComponents([.day], from: now)
        return components.day

    }

在上面的示例中,解决方案是将 Any? 更改为 String 类型。

调用实例方法“* * *”时没有完全匹配

这是一条一般错误消息,因为在方法调用中使用了错误的类型。这就是为什么我在这里添加以帮助其他人。

我希望这个回答能对你们中的一些人有所帮助。

最佳。

我将 dataTask 与 URL 一起使用,但我将 URL 展开为 NSURL,这就是它给我错误的原因。

我是这样做的:

if let url = NSURL(String: "http://myyrl.com/filename.jpg") {
      //my code
}

修复错误的方法是将 NSURL 替换为 URL:

if let url = URL(String: "http://myyrl.com/filename.jpg") {
      //my code 
}

如果您在 Text 元素中遇到此错误,请尝试 wrapping 您在 [=18= 中的值]String(describing: value)。解决了我的问题。

Text("Leading text \(String(describing: value))")

Xcode 在使当前 class 符合 SKPaymentTransactionObserver 之前添加 SKPaymentQueue 方法(例如 SKPaymentQueue.default().add() 到您的代码时会出现此错误协议。

如果是这种情况,只需让您的 class 符合 SKPaymentTransactionObserver 协议即可解决此错误。