gpt4 book ai didi

swift - Swift 3 开发快照中的 POST 请求给出 "ambiguous reference to member ' dataTask(带有 :completionHandler:)'

转载 作者:IT王子 更新时间:2023-10-29 05:46:06 26 4
gpt4 key购买 nike

我正在尝试在 Swift 3 开发快照中发出 POST 请求,但由于某种原因,对 NSURLSession.dataTask 的调用失败,标题中出现错误。

这是我使用的代码:

import Foundation

var err: NSError?
var params: Dictionary<String, String>
var url: String = "http://notreal.com"

var request = NSMutableURLRequest(url: NSURL(string: url)!)
var session = NSURLSession.shared()

request.httpMethod = "POST"
request.httpBody = try NSJSONSerialization.data(withJSONObject: params, options: [])
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

var task = session.dataTask(with: request, completionHandler: {data, response, err -> Void in
print("Entered the completionHandler")
})

task.resume()

错误是:

testy.swift:19:12: error: ambiguous reference to member 'dataTask(with:completionHandler:)'
var task = session.dataTask(with: request, completionHandler: {data, response, err -> Void in
^~~~~~~
Foundation.NSURLSession:2:17: note: found this candidate
public func dataTask(with request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Swift.Void) -> NSURLSessionDataTask
^
Foundation.NSURLSession:3:17: note: found this candidate
public func dataTask(with url: NSURL, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Swift.Void) -> NSURLSessionDataTask

谁能告诉我:

  1. 为什么会给我这个错误
  2. 如何仅使用 Foundation 在最新的 Swift 开发快照中成功发出带有自定义参数的 POST 请求(我在任何情况下都无法使用其他第三方库)

谢谢!

编辑:我注意到有人在我的问题之后写了一个副本。这里的答案是更好的。

最佳答案

使用 URLRequest 结构。

在 Xcode8 中可以正常工作:

import Foundation

// In Swift3, use `var` struct instead of `Mutable` class.
var request = URLRequest(url: URL(string: "http://example.com")!)
request.httpMethod = "POST"

URLSession.shared.dataTask(with: request) {data, response, err in
print("Entered the completionHandler")
}.resume()

此外,此错误的原因是 URLSession API 具有相同名称的方法,但每个方法采用不同的参数。

因此,如果没有显式强制转换,API 会很困惑。我认为这是 API 的命名错误。

出现这个问题,代码如下:

let sel = #selector(URLSession.dataTask(with:completionHandler:))

关于swift - Swift 3 开发快照中的 POST 请求给出 "ambiguous reference to member ' dataTask(带有 :completionHandler:)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37529049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com