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

Posted

技术标签:

【中文标题】在 Swift 中调用实例方法错误消息没有完全匹配【英文标题】:No exact matches in call to instance method error message in Swift 【发布时间】:2020-09-16 14:24:48 【问题描述】:

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

对实例方法“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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

如果您在 Text 元素中遇到此错误,请尝试在 String(describing: value)包装您的值。修复了我的情况。

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

Source

【讨论】:

可能不是问题的确切答案,但通常是解决此问题的一种方法。通常它只是一个未包装的可选项,这样你会发现【参考方案3】:

为什么 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 而不是 NSMutableURLRequest。

SwiftUI 示例的解决方案

假设这是您的 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 类型。

调用实例方法'* * *'没有完全匹配

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

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

最好的。

【讨论】:

您可能想向 Apple 提交错误报告。当然,诊断可能比这更好。 谢谢@matt,我是通过feedbackassistant.apple.com举报的。【参考方案4】:

我使用带有 URL 的 dataTask,但我将 URL 解包为 NSURL,这就是它给我一个错误的原因。

我正在这样做:

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

修复错误的方法是用URL 替换NSURL

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

【讨论】:

感谢您的回答。这是关于 Xcode 的,它是一般错误消息。它可以在很多情况下导致。最好的。

以上是关于在 Swift 中调用实例方法错误消息没有完全匹配的主要内容,如果未能解决你的问题,请参考以下文章

调用数组中的初始化程序没有完全匹配(Swift/SwiftUI)

调用初始化程序没有完全匹配 - Swift 2D 数组

在 Swift 中向用户显示网络错误消息

Swift 3 中的 Wikiitude 实例

使用格式参数时,Swift 中的字符串初始值设定项问题

调用 Alamofire swift 4 中的额外参数“方法”