如何从NSURLSession解析NSData到NSArray

时间:2015-08-06 19:21:57

标签: ios nsarray nsdata nsurlsession swift2

我正在做一个教程,他们将NSURLSession的结果打印为字符串。但我想从中得到一个阵列。

我正在访问的网址格式如下:[24,68,69,70,71,72,73]。

我认为我并不完全理解NSArray的填充方式是如何工作的,因为我无法使其工作。

我认为只需创建一个NSArray并输入这些数据应该可以解决问题,就像我现在可以打印它一样:

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
     print(NSString(data: data!, encoding: NSUTF8StringEncoding))
}

输出:

  

可选([24,68,69,70,71,72,73])

我还想知道为什么它将输出包含在“Optional()”中。谁可以为我澄清这个?

1 个答案:

答案 0 :(得分:1)

如果从数据中获得[24,68,69,70,71,72,73],则此数据是JSON数组。

您可以使用Foundation的NSJSONSerialization解码数据并将结果转换为Foundation对象(如NSArray)或Swift整数数组。

因为它是Swift 2,NSJSONSerialization throws所以你还必须使用do try catch语法来处理错误。

Optional是Swift中的基本类型。您应该阅读the doc,因为要做到这一点非常重要。简而言之:Optional是包含值或nil的类型。你必须"解开"获取值的可选项。完成了if letguard let??或其他几种方式。

以下是您的数组的所有这些的简单示例(将其放在NSURLSession任务中以替换您的print命令):

do {
    if let myData = data, let myArray = try NSJSONSerialization.JSONObjectWithData(myData, options: []) as? [Int] {
        for number in myArray {
            print(number)
        }
    }
} catch {
    print(error)
}

如果 使用NSArray而不是Swift数组,只需更改类型转换:

do {
    if let myData = data, let myArray = try NSJSONSerialization.JSONObjectWithData(myData, options: []) as? NSArray {
        for number in myArray {
            print(number)
        }
    }
} catch {
    print(error)
}