Swift 2.0:无法使用类型的参数列表调用...(HTTP请求)(Swift 2.0 : Cannot invoke with an argument list of type… (HTTP Re

编程入门 行业动态 更新时间:2024-10-20 03:38:28
Swift 2.0:无法使用类型的参数列表调用...(HTTP请求)(Swift 2.0 : Cannot invoke with an argument list of type… (HTTP Request))

自从我升级到Xcode 7 beta后,我遇到了一个无法修复的错误。 这是我的DataManager.swift的完整代码

import Foundation var TopAppURL:String = String() var numberAsked:String = String() class DataManager { class func getInfo(ID : String){ TopAppURL = "http://sweetapi.com/?=\(ID)" numberAsked = ID } class func loadDataFromURL(url: NSURL, completion:(data: NSData?, error: NSError?) -> Void) { var session = NSURLSession.sharedSession() // Use NSURLSession to get data from an NSURL let loadDataTask = session.dataTaskWithURL(url, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in if let responseError = error { completion(data: nil, error: responseError) } else if let httpResponse = response as? NSHTTPURLResponse { if httpResponse.statusCode != 200 { var statusError = NSError(domain:"com.raywenderlich", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."]) completion(data: nil, error: statusError) } else { completion(data: data, error: nil) } } }) loadDataTask.resume() } class func getDataFromSweetApiOk(success: ((IDdata: NSData!) -> Void)) { //1 print("DataManager loads \(TopAppURL)") loadDataFromURL(NSURL(string: TopAppURL)!, completion:{(data, error) -> Void in //2 if let urlData = data { //3 success(IDdata: urlData) } }) } }

所以我得到这个错误:“不能用类型'(NSURL,completionHandler:(NSData!,NSURLResponse!,NSError!) - > Void)的参数列表调用'dataTaskWithURL''”我到处搜索如何解决这个问题,但像Swift 2.0是非常新的,我没有找到任何解决方案。

Since I upgraded to Xcode 7 beta I have an error that I can't fix. Here's the full code from my DataManager.swift

import Foundation var TopAppURL:String = String() var numberAsked:String = String() class DataManager { class func getInfo(ID : String){ TopAppURL = "http://sweetapi.com/?=\(ID)" numberAsked = ID } class func loadDataFromURL(url: NSURL, completion:(data: NSData?, error: NSError?) -> Void) { var session = NSURLSession.sharedSession() // Use NSURLSession to get data from an NSURL let loadDataTask = session.dataTaskWithURL(url, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in if let responseError = error { completion(data: nil, error: responseError) } else if let httpResponse = response as? NSHTTPURLResponse { if httpResponse.statusCode != 200 { var statusError = NSError(domain:"com.raywenderlich", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."]) completion(data: nil, error: statusError) } else { completion(data: data, error: nil) } } }) loadDataTask.resume() } class func getDataFromSweetApiOk(success: ((IDdata: NSData!) -> Void)) { //1 print("DataManager loads \(TopAppURL)") loadDataFromURL(NSURL(string: TopAppURL)!, completion:{(data, error) -> Void in //2 if let urlData = data { //3 success(IDdata: urlData) } }) } }

So I got this error : "Cannot invoke 'dataTaskWithURL' with an argument list of type '(NSURL, completionHandler: (NSData!, NSURLResponse!, NSError!) -> Void)'" I searched everywhere how to fix this but like Swift 2.0 is very new, I didn't found any solution.

最满意答案

func dataTaskWithURL(_ url: NSURL, completionHandler completionHandler: ((NSData!, NSURLResponse!, NSError!) -> Void)?) -> NSURLSessionDataTask

已经改变为

func dataTaskWithURL(_ url: NSURL, completionHandler completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask?

在iOS9中。 completionHandler不再是可选的,completionHandler中的所有参数现在都是选项而不是隐式解包的选项。

现在,为了在将来对可选系统进行更改时提供帮助,请尽量避免(data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in ,您可以简单地使用data, response, error in选项点击以获取更多详细信息。

这将从您的代码中删除膨胀,从而提高可读性。

要在评论中解决您的问题,请查看此问题 。

func dataTaskWithURL(_ url: NSURL, completionHandler completionHandler: ((NSData!, NSURLResponse!, NSError!) -> Void)?) -> NSURLSessionDataTask

has changed to

func dataTaskWithURL(_ url: NSURL, completionHandler completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask?

in iOS9. The completionHandler no longer is optional, and all parameters in the completionHandler are now optionals instead of implicitly unwrapped optionals.

Now, to help with this in future changes to the optional system, try to avoid (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in, you can simply use data, response, error in and then option-click for more details.

This will remove bloat from your code, and thus improve readability.

To solve your problem in the comments, check out this question.

更多推荐

本文发布于:2023-07-25 05:40:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1256775.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:参数   类型   列表   Swift   HTTP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!