在我的项目中,我有一个类型为 [String: AnyObject]
的字典,并将其转换为 NSMutableDictionary
以与项目中的某些 Objective C 代码兼容。
我开始使用以下转换选项(我在许多堆栈溢出帖子中将其视为可接受的答案):
dictionary as? NSMutableDictionary
这在大多数情况下都有效,但在某些情况下,结果为 nil,这表明字典无法转换为 NSMutableDictionary。然而,在字典中使用完全相同的值,下面的转换成功地产生了一个 NSMutableDictionary:
NSMutableDictionary(dictionary: dictionary)
当第二个选项能够毫无问题地转换时,为什么第一个选项会导致 nil?
你可以在这里看到How do I convert swift Dictionary to NSDictionary第一个选项是公认的答案,但它似乎并不适用于所有情况。还提到了第二个选项,但没有那么多人同意这是正确答案。
最佳答案
This works in most cases
不,这根本行不通。
不像 immutable NSDictionary
Swift Dictionary
和 NSMutableDictionary
是不相关的。
你可以桥接转换(as
without ?
)[String:String]
到 NSDictionary
但你不能桥接或有条件地向下转换(as?
)到 NSMutableDictionary
。
第二种语法有效是因为创建了一个新的 NSMutableDictionary
实例。 Swift 字典参数隐式桥接到 NSDictionary
同样的行为也适用于 Swift Array
和 Foundation NSMutableArray
关于objective-c - 将 Swift Dictionary 转换为 NSMutableDictionary 的这两个选项有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58859822/