NSData不是NSData的子类型?

时间:2014-10-21 04:04:21

标签: ios xcode swift

我收到错误:

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()

2 个答案:

答案 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)
        }
    })
}