自从我升级到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)?) -> NSURLSessionDataTaskhas 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.
更多推荐
发布评论