如何将 NSData 从 NSURLSession 解析为 NSArray
How to parse NSData from NSURLSession to a NSArray
我正在做一个教程,他们将 NSURLSession
的结果打印为字符串。但我想从中得到一个数组。
我正在访问的 URL 格式如下:[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))
}
输出:
Optional([24,68,69,70,71,72,73])
我也想知道为什么它把输出包含在"Optional()"中。谁能为我澄清一下?
如果你从数据中得到[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 的类型。您必须 "unwrap" 一个 Optional 才能获取该值。它是通过 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)
}
我正在做一个教程,他们将 NSURLSession
的结果打印为字符串。但我想从中得到一个数组。
我正在访问的 URL 格式如下:[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))
}
输出:
Optional([24,68,69,70,71,72,73])
我也想知道为什么它把输出包含在"Optional()"中。谁能为我澄清一下?
如果你从数据中得到[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 的类型。您必须 "unwrap" 一个 Optional 才能获取该值。它是通过 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)
}