【发布时间】:2016-12-12 21:40:16
【问题描述】:
有人可以解释为什么这在 Swift 3 中有效吗?
var dict: [AnyHashable: Any]
let b: AnyObject? = nil
let c = b as Any
dict = ["a": "aa", "b": c]
如果我测试
dict["b"] == nil
它返回假。应该是对的吧?
【问题讨论】:
-
在 Swift 中使用
nil作为字典值是无稽之谈,因为根据定义将键设置为nil会删除该键。 -
我知道。关键是:不知何故,我得到了一个带有
nil值的字典并且无法删除它,因为检查dict[key] == nil总是返回 false -
你为什么不把它作为一个可选的并检查
if let _ = dict["b"]。这始终是 swift 中的首选检查 -
有趣...这里有太多的编译器魔法。
c是Any?,而不是nil,因为c有一个值。但值是nil。 -
通过
dict[key] = nil将其设置为 nil 确实会删除该值。但是,dict 可以将“可选”作为其类型。它会导致与下标语法混淆的行为,但您仍然可以执行类似dict.updateValue(nil, forKey: "a")的操作来设置 nil 值。出于显而易见的原因,根本不推荐使用带有选项的 dict。
标签: swift swift3 swift-dictionary