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
类型提供相同的功能(值与引用语义除外)以及包含对象的类型。
似乎随着 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
类型提供相同的功能(值与引用语义除外)以及包含对象的类型。