在我的项目中,我有一个[String: String]
类型的字典,并将其转换为NSMutableDictionary
以与该项目中的某些Objective C代码兼容。
我开始使用以下转换选项(在许多堆栈溢出帖子中,我都将其视为可接受的答案):
dictionary as? NSMutableDictionary
这在大多数情况下都有效,但是在某些情况下,结果为nil,表明该词典无法转换为NSMutableDictionary。但是,在字典中具有完全相同的值时,以下转换成功地导致了NSMutableDictionary:
NSMutableDictionary(dictionary: dictionary)
为什么当第二个选项能够转换而没有任何问题时,第一个选项为什么会为nil?
您可以在How do I convert swift Dictionary to NSDictionary中看到第一个选项是已接受的答案,但似乎并非在所有情况下都有效。还提到了第二个选项,但没有太多人同意这是正确的答案。
在大多数情况下有效
不,这根本不起作用。
与不可变]不同>NSDictionary
Swift Dictionary
和NSMutableDictionary
无关。
您可以将类型转换(as
不带?
)[String:String]
桥接到NSDictionary
,但不能桥接类型转换,也不能有条件地将其as?
降级到NSMutableDictionary
。
第二种语法有效,因为创建了NSMutableDictionary
的新实例。 Swift字典参数隐式桥接到NSDictionary
[Swift Array
和Foundation NSMutableArray
的相同行为也是如此