这两种将Swift字典转换为NSMutableDictionary的选项有什么区别?

问题描述 投票:0回答:1

在我的项目中,我有一个[String: String]类型的字典,并将其转换为NSMutableDictionary以与该项目中的某些Objective C代码兼容。

我开始使用以下转换选项(在许多堆栈溢出帖子中,我都将其视为可接受的答案):

dictionary as? NSMutableDictionary

这在大多数情况下都有效,但是在某些情况下,结果为nil,表明该词典无法转换为NSMutableDictionary。但是,在字典中具有完全相同的值时,以下转换成功地导致了NSMutableDictionary:

NSMutableDictionary(dictionary: dictionary)

为什么当第二个选项能够转换而没有任何问题时,第一个选项为什么会为nil?

您可以在How do I convert swift Dictionary to NSDictionary中看到第一个选项是已接受的答案,但似乎并非在所有情况下都有效。还提到了第二个选项,但没有太多人同意这是正确的答案。

objective-c swift dictionary casting nsdictionary
1个回答
1
投票

在大多数情况下有效

不,这根本不起作用。

不可变]不同>NSDictionarySwift DictionaryNSMutableDictionary无关。

您可以将类型转换(as不带?[String:String]桥接到NSDictionary,但不能桥接类型转换,也不能有条件地将其as?降级到NSMutableDictionary

第二种语法有效,因为创建了NSMutableDictionary的新实例。 Swift字典参数隐式桥接到NSDictionary


[Swift Array和Foundation NSMutableArray的相同行为也是如此

© www.soinside.com 2019 - 2024. All rights reserved.