如何从Swift NSURLSession获取数据?

lam*_*rdd 2 nsurlsession swift

例如,我有以下代码:

let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {data, response, error -> Void in
        var dann = NSString(data: data, encoding: NSUTF8StringEncoding)!
        self.str = dann
})
task.resume()
Run Code Online (Sandbox Code Playgroud)

我想将数据传输到类中的变量(类中的str变量).字符串"self.str = dann"不传达任何内容.我怎样才能做到这一点?

BJ *_*ler 6

我不确定NSString是你想要的类型.JSON可能是返回数据的格式,具体取决于您的URL功能.我尝试了提供的代码并得到了同样的问题,但是如果你将它视为JSON(我使用httpbin.org作为虚拟URL源)并且它有效.

    let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: "http://httpbin.org/get")!, completionHandler: { (data, response, error) -> Void in
        do{
            let str = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [String:AnyObject]
            print(str)
        }
        catch {
            print("json error: \(error)")
        }
    })
    task.resume()
Run Code Online (Sandbox Code Playgroud)

(感谢建议编辑@sgthad.编辑与问题不是特别相关,但仍希望将代码更新为最新.)

更新Swift 3语法

let url = URL(string: "http://httpbin.org/get")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
    guard let unwrappedData = data else { return }
    do {
        let str = try JSONSerialization.jsonObject(with: unwrappedData, options: .allowFragments)
        print(str)
    } catch {
        print("json error: \(error)")
    }
}
task.resume()
Run Code Online (Sandbox Code Playgroud)