【发布时间】:2016-05-30 15:17:17
【问题描述】:
我正在尝试在 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
谁能告诉我:
- 为什么会出现这个错误
- 如何仅使用 Foundation 在最新的 Swift 开发快照中使用自定义参数成功发出 POST 请求(在任何情况下我都无法使用其他第三方库)
谢谢!
编辑:我注意到有人在我之后写了这个问题的副本。这里的答案是更好的答案。
【问题讨论】:
-
这很奇怪,我不明白为什么传递
NSMutableURLRequest是模棱两可的。它不是NSURL的子类,所以 IDK 它会如何认为它可以进入那里。 -
这就是我的想法。它可能是一个错误,因为它是开发快照。
-
您可以尝试通过将
dataTaskWithRequest:completionHandler:分配给具有指定类型注释的变量(NSURL, (NSData?, NSURLResponse?, NSError?) -> Swift.Void) -> NSURLSessionDataTask然后调用该闭包来消除此调用的歧义
标签: swift macos post nsurlsession