无法在 Swift 2 中使用参数列表调用“sendAsynchronousRequest”
Posted
技术标签:
【中文标题】无法在 Swift 2 中使用参数列表调用“sendAsynchronousRequest”【英文标题】:Cannot invoke 'sendAsynchronousRequest' in Swift 2 with an argument list 【发布时间】:2015-06-11 07:42:33 【问题描述】:我目前正在重写部分 Swift 1.2 代码以与 Swift 2.0 兼容。实际上我无法弄清楚对“sendAsynchronousRequest”进行了哪些更改 - 目前我所有的请求都失败了
NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler: (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in)
无法使用类型参数列表调用“sendAsynchronousRequest” '(NSURLRequest,队列:NSOperationQueue,completionHandler: (NSURLResponse!, NSData!, NSError!) -> Void)'
你有什么想法吗?
【问题讨论】:
【参考方案1】:在 Swift 1.2 和 Xcode 6.3 中,sendAsynchronousRequest:queue:completionHandler:
的签名是:
class func sendAsynchronousRequest(request: NSURLRequest,
queue: NSOperationQueue!,
completionHandler handler: (NSURLResponse!, NSData!, NSError!) -> Void)
然而,在 Swift 2 和 Xcode 7 beta 中,sendAsynchronousRequest:queue:completionHandler:
的签名发生了变化,现在是:
// Note the non optionals, optionals and implicitly unwrapped optionals differences
class func sendAsynchronousRequest(request: NSURLRequest,
queue: NSOperationQueue,
completionHandler handler: (NSURLResponse?, NSData?, NSError?) -> Void)
因此,转向 Swift 2 和 Xcode 7 beta,您将不得不更改您的 completionHandler
参数实现并确保您的 queue
参数是非可选的。
【讨论】:
【参考方案2】:似乎问题在于您在完成块中的隐式未包装选项。让它成为可选的,它应该可以正常工作,
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) (response: NSURLResponse?, data: NSData?, error: NSError?) in
let string = NSString(data: data!, encoding: NSISOLatin1StringEncoding)
print("Response \(string!)")
【讨论】:
【参考方案3】:由于 NSURLConnection.sendAsynchronousRequest
在 ios 9 中已弃用。应该使用 NSURLSession
public func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask
【讨论】:
【参考方案4】:斯威夫特 3
let url:URL? = URL(string:location)
if url == nil
print("malformed url : \(location)")
NSURLConnection.sendAsynchronousRequest(URLRequest(url:url!),
queue: OperationQueue.main)
(response: URLResponse?, data: Data?, error: Error?) -> Void in
【讨论】:
以上是关于无法在 Swift 2 中使用参数列表调用“sendAsynchronousRequest”的主要内容,如果未能解决你的问题,请参考以下文章
Swift Vapor - configure.swift 中的“无法使用类型的参数列表调用“添加”...”错误
Swift,无法使用类型参数列表调用 objc_setAssociatedObject
Swift 编译器错误:“无法使用 '((_) -> _)' 类型的参数列表调用 'map'”
Swift:无法使用类型为“([Idea],来自:Data)”的参数列表调用“解码”