【问题标题】:No exact matches in call to instance method error message in Swift在 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

【问题讨论】:

    标签: swift xcode swift5


    【解决方案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 的,它是一般错误消息。它可以在很多情况下导致。最好的。
      猜你喜欢
      • 2022-11-09
      • 1970-01-01
      • 2022-09-28
      • 2020-08-22
      • 2021-12-14
      • 2023-03-18
      • 1970-01-01
      • 2022-08-02
      • 2019-12-05
      相关资源
      最近更新 更多