我正在做一个教程,他们将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()”中。谁可以为我澄清这个?
答案 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 let
或guard 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)
}