2016-09-23 56 views
0

iOS 10的发布似乎有些事情已经破裂。对我来说主要是使用NSMutableDictionary和NSMutableArray。两个人似乎都不能解析一串JSON,而是在iOS 10之前给出一个零值,但它们按预期填充。唯一解决这个问题的方法是分别使用NSDictionary和NSArray,然后使用init方法进行回退。例如:iOS 10 NSMutableDictionary和NSMutableArray不像以前一样工作

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 :) 

我想知道为什么?

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

回答

2

基金会类型NSMutableArray/NSMutableDictionary不相关的雨燕同行无法弥合/从字面上创建雨燕裹挟。但是,这并不是新的斯威夫特3

基本上使用NSMutableArray/NSMutableDictionary斯威夫特除非你有例如使用一些低级别的CoreFoundation API交互绝对别无选择。与var一起使用的原生Array/Dictionary类型提供了相同的功能(除了值与引用语义之外)以及包含对象的类型。

+0

嗯好吧谢谢。我正在处理别人的代码,我知道在ObjC上使用“native”类型,但是我不知道这是一个真正的坏主意......你说这对Swift3来说并不新鲜 - 它是如何工作的,直到iOS 10? (我知道iOS并不一定意味着Swift3,但那是当问题开始时) –

+0

实际上在Swift 2中(即使在最初的发行版Swift 1中)也不可能将Swift集合类型转换为** mutable **基础对象。 – vadian

+0

您认为将任何以NSMutablexxx为原始版本的内容安全吗?就像“全部替换”类型一样。显然修复一个错误,但一般功能? –

相关问题