Swift3 iOS 10 NSMutableDictionary和NSMutableArray与以前不同

Swift3 iOS 10 NSMutableDictionary和NSMutableArray与以前不同,swift3,ios10,Swift3,Ios10,随着iOS 10的发布,似乎有一些问题已经解决了。对我来说,最主要的是NSMutableDictionary和NSMutableArray的使用。两者似乎都不再能够解析JSON字符串,而是给出一个nil,而在iOS 10之前,它们按照预期填充。我发现解决这个问题的唯一方法是分别使用NSDictionary和NSArray,然后使用init方法进行回溯。例如: let json = "{ \"code\": \"abcde\", \"name\": \"JP Morgan\" }" json as

随着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 :)
我想知道为什么


我希望这有助于解决他们的问题…

< p>基础类型<代码> nSutababLay/NSMutable字典< /代码>与SWIFT对应不相关,不能从字面上创建的SWIFT类型桥接/强制。但这在Swift 3中并不新鲜


基本上不要在Swift中使用
NSMutableArray/NSMutableDictionary
,除非您完全没有选择,例如与一些低级CoreFoundation API交互。与
var
一起使用的本机
数组
/
字典
类型提供相同的功能(值与引用语义除外)另外,包含对象的类型。

< P>基础类型<代码> nSutababLay/NSMutable字典< /代码>不与SWIFT对应,并且不能从字面上创建的SWIFT类型桥接/强制。但这在Swift 3中并不新鲜


基本上不要在Swift中使用
NSMutableArray/NSMutableDictionary
,除非您完全没有选择,例如与一些低级CoreFoundation API交互。与
var
一起使用的本机
数组
/
字典
类型提供相同的功能(值与引用语义除外)以及包含对象的类型。

Hmm好的,谢谢。我正在处理别人的代码,我知道使用“本机”类型而不是ObjC类型,但我不知道这是一个真正的坏主意。。。你说这对Swift3来说并不新鲜-为什么它一直工作到iOS 10?(我知道iOS不一定意味着SWIFT3,但那是问题开始时)实际上在Swift 2(即使在最初的Swift Swift 1中),也不可能把一个快速的集合类型转换成可变的基础对应物。你认为对于NSMutablexxx来说是不是安全到本地版本?类似于“全部替换”类型的方法。显然,在这里和那里修复了一个bug,但是一般的功能是什么?有一点需要考虑:您必须注意将表单引用(基础类型)更改为值(Swift类型)语义。例如,如果要更改嵌套数组中的值,则必须获取内部数组,更改后再将其分配回封闭数组。对于扁平型没有区别。嗯,好的,谢谢。我正在处理别人的代码,我知道使用“本机”类型而不是ObjC类型,但我不知道这是一个真正的坏主意。。。你说这对Swift3来说并不新鲜-为什么它一直工作到iOS 10?(我知道iOS不一定意味着SWIFT3,但那是问题开始时)实际上在Swift 2(即使在最初的Swift Swift 1中),也不可能把一个快速的集合类型转换成可变的基础对应物。你认为对于NSMutablexxx来说是不是安全到本地版本?类似于“全部替换”类型的方法。显然,在这里和那里修复了一个bug,但是一般的功能是什么?有一点需要考虑:您必须注意将表单引用(基础类型)更改为值(Swift类型)语义。例如,如果要更改嵌套数组中的值,则必须获取内部数组,更改后再将其分配回封闭数组。对于扁平型,没有区别。