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)
}
})
}
}
所以我得到了这个错误:"Cannot invoke 'dataTaskWithURL' with an argument list of type '(NSURL, completionHandler: (NSData!, NSURLResponse!, NSError!) -> Void)'"
我到处搜索如何解决这个问题,但是 Swift 2.0 是非常新的,我没有找到任何解决方案。
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
,然后单击选项以获取更多详细信息。
这将消除代码的臃肿,从而提高可读性。
要解决您在评论中的问题,请查看 。
自从我升级到 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)
}
})
}
}
所以我得到了这个错误:"Cannot invoke 'dataTaskWithURL' with an argument list of type '(NSURL, completionHandler: (NSData!, NSURLResponse!, NSError!) -> Void)'" 我到处搜索如何解决这个问题,但是 Swift 2.0 是非常新的,我没有找到任何解决方案。
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
,然后单击选项以获取更多详细信息。
这将消除代码的臃肿,从而提高可读性。
要解决您在评论中的问题,请查看