如何从Swift NSURLSession获取数据?

时间:2014-11-09 09:39:34

标签: swift nsurlsession

例如,我有以下代码:

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

我想将数据传输到类中的变量(类中的str变量)。字符串" self.str = dann"不传达任何东西。我怎么能这样做?

3 个答案:

答案 0 :(得分: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()

(感谢建议编辑@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()

答案 1 :(得分:2)

你能试试dispatch_async吗?

let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) {(data, response, error) in
        dispatch_async(dispatch_get_main_queue(), {
           var dann = NSString(data: data, encoding: NSUTF8StringEncoding)!
           self.str = dann
        })
    }
    task.resume()

答案 2 :(得分:0)

// Swift 3基于Quick ref。

cv2.face.createLBPHFaceRecognizer().