如何将NSURLSession中的数据作为字符串获取?

时间:2015-05-08 15:53:19

标签: ios swift nsurl nsurlsession

我使用的API以简洁的格式提供数据 - 如何将其作为String?我可以打印出来,但将其保存为字符串似乎无法正常工作。

我特别想使用NSURLSession任务中的数据更新UI元素。

    let url = NSURL(string: apiCall)
    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
        //I want to replace this line below with something to save it to a string.
        println(NSString(data: data, encoding: NSUTF8StringEncoding))
    }

    task.resume()

3 个答案:

答案 0 :(得分:4)

Swift 4

let data = String(bytes: data, encoding: String.Encoding.utf8)

答案 1 :(得分:3)

如果您的问题是在任务之外它是空的,那是因为它在完成块结束后超出了范围。您需要将其保存在范围更广的地方。

let url = NSURL(string: apiCall)
var dataString:String = ""
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
    //I want to replace this line below with something to save it to a string.
    dataString = String(NSString(data: data, encoding: NSUTF8StringEncoding))
    dispatch_async(dispatch_get_main_queue()) {
        // Update the UI on the main thread.
        self.textView.text = dataString
    });

}
task.resume()

现在当您访问dataString时,它将被设置为来自任务的数据。但要小心,在任务完成之前,不会设置dataString,所以你应该尝试在完成块中使用它。

答案 2 :(得分:0)

Swift使用String而非NSString

但是你可以将NSString强制转换为String

var dataAsString:String = NSString(data: data, encoding: NSUTF8StringEncoding) as! String