objective-c - 将 Swift Dictionary 转换为 NSMutableDictionary 的这两个选项有什么区别?

标签 objective-c swift dictionary casting nsdictionary

在我的项目中,我有一个类型为 [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 DictionaryNSMutableDictionary 是不相关的。

你可以桥接转换(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/

相关文章:

iphone - 将 TextField 文本格式化为价格

ios - UITabBarController 检查选项卡是否是第一次选择

嵌套数组上的 Swift 相等运算符

ios - Branch.io "Undefined symbols for architecture x86_64:"错误

ios - UIAlertViews、UIActionSheets 和 keyWindow 问题

ios - 具有渐变边框和圆角的 UIButton

ios - 关于Swift中设置闹钟天数的问题

ios - iPhone map 方向

python - 如何将二维数组拆分为具有唯一值和字典的数组?

javascript - 从文档/对象中删除特定的键值对