将 Swift Dictionary 转换为 NSMutableDictionary 的这两个选项有什么区别?
What is the difference between these two options for converting Swift Dictionary to NSMutableDictionary?
在我的项目中,我有一个 [String: AnyObject]
类型的字典,正在将其转换为 NSMutableDictionary
以与项目中的某些 Objective C 代码兼容。
我开始使用以下转换选项(我在许多堆栈溢出帖子中将其视为可接受的答案):
dictionary as? NSMutableDictionary
这在大多数情况下有效,但在某些情况下结果为 nil,这表明字典无法转换为 NSMutableDictionary。然而,在字典中使用完全相同的值,下面的转换成功地产生了 NSMutableDictionary:
NSMutableDictionary(dictionary: dictionary)
当第二个选项能够毫无问题地转换时,为什么第一个选项会导致 nil?
你可以在这里看到第一个选项是公认的答案,但它似乎并不适用于所有情况。第二个选项也被提及,但没有那么多人同意它是正确答案。
This works in most cases
不,这根本行不通。
不像immutableNSDictionary
SwiftDictionary
和NSMutableDictionary
没有关系。
您可以桥接转换(as
没有 ?
)[String:String]
到 NSDictionary
但您不能桥接转换也不能有条件地向下转换(as?
) NSMutableDictionary
.
第二种语法有效,因为创建了 NSMutableDictionary
的新实例。 Swift 字典参数隐式桥接到 NSDictionary
同样的行为也适用于 Swift Array
和 Foundation NSMutableArray
在我的项目中,我有一个 [String: AnyObject]
类型的字典,正在将其转换为 NSMutableDictionary
以与项目中的某些 Objective C 代码兼容。
我开始使用以下转换选项(我在许多堆栈溢出帖子中将其视为可接受的答案):
dictionary as? NSMutableDictionary
这在大多数情况下有效,但在某些情况下结果为 nil,这表明字典无法转换为 NSMutableDictionary。然而,在字典中使用完全相同的值,下面的转换成功地产生了 NSMutableDictionary:
NSMutableDictionary(dictionary: dictionary)
当第二个选项能够毫无问题地转换时,为什么第一个选项会导致 nil?
你可以在这里
This works in most cases
不,这根本行不通。
不像immutableNSDictionary
SwiftDictionary
和NSMutableDictionary
没有关系。
您可以桥接转换(as
没有 ?
)[String:String]
到 NSDictionary
但您不能桥接转换也不能有条件地向下转换(as?
) NSMutableDictionary
.
第二种语法有效,因为创建了 NSMutableDictionary
的新实例。 Swift 字典参数隐式桥接到 NSDictionary
同样的行为也适用于 Swift Array
和 Foundation NSMutableArray