iOS 10 NSMutableDictionary 和 NSMutableArray 不能像以前那样工作

iOS 10 NSMutableDictionary and NSMutableArray not working as before

似乎随着 iOS 10 的发布,一些东西坏了。对我来说最主要的是 NSMutableDictionary 和 NSMutableArray 的使用。两者似乎都不再能够解析 JSON 的字符串,而是给出 nil 而在 iOS 10 之前,它们按预期填充。我发现解决这个问题的唯一方法是分别使用 NSDictionary 和 NSArray,然后使用 init 方法进行转换。例如:

let json = "{ \"code\": \"abcde\", \"name\": \"JP Morgan\" }"
json as! NSMutableDictionary // gives nil
NSMutableDictionary(dictionary: json as! NSDictionary) // works :)

let json = "[{ \"code\": \"abcde\", \"name\": \"JP Morgan\" }]"
json as! NSMutableArray // gives nil
NSMutableArray(array: json as! NSArray) // works :)

我想知道为什么?

我希望这可以帮助人们解决他们的问题...

基础类型 NSMutableArray / NSMutableDictionary 与 Swift 对应类型无关,不能从字面上创建的 Swift 类型桥接/强制转换。但这在 Swift 3.

中并不新鲜

基本上不要在Swift中使用NSMutableArray / NSMutableDictionary,除非你别无选择,例如与一些低级别的CoreFoundation交互API .与 var 一起使用的本机 Array / Dictionary 类型提供相同的功能(值与引用语义除外)以及包含对象的类型。