我收到错误:
NSData不是我下面代码中NSData的子类型,我做错了什么?
let urlPath = "myurl"
var url = NSURL(string: urlPath)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(url, completionHandler: {data, response, error -> Void in
if error {
println(error)
} else {
println(data)
}
})
task.resume()
答案 0 :(得分:1)
实际的错误消息是'NSData!' is not a subtype of 'NSData'
(请注意!NSData
之后)
NSURL(string:)
是failable initializer,是Swift 1.1(Xcode 6.1)中的新功能。可用的初始化程序返回一个可选的,在失败时为nil
。
您必须先检查是否有失败才能使用网址:
let urlPath = "myurl"
if let url = NSURL(string: urlPath) {
let session = NSURLSession.sharedSession()
let request = NSURLRequest(URL: url)
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
if error != nil {
println(error)
} else {
println(data)
}
})
task.resume()
}
答案 1 :(得分:0)
你得到的错误是非常误导的。真正的问题是NSURL(string:)
是一个可用的初始化器,因此它返回一个可选的。但是dataTaskWithRequest
不需要NSURL?
需要NSURL
你的代码中有另一个错误,错误不是布尔值,因此你需要将它与nil进行比较。这是编译的代码:
let urlPath = "myurl"
if let url = NSURL(string: urlPath) {
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url, completionHandler: { (data, response, error) in
if (error != nil) {
println(error)
} else {
println(data)
}
})
}