如何将 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 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)
}