美文网首页
【Swift】Dictionary的下标语法与Optional的

【Swift】Dictionary的下标语法与Optional的

作者: NiniaW | 来源:发表于2018-05-10 13:30 被阅读0次

今天看到一个有趣的例子:

var dictionary: [String: String?] = ["key": nil]
dictionary["key"] = nil

乍一看,感觉两行代码赋予dictionary的值应该是相同的,但其实第一行得到["key": nil],而第二行[:]

这就涉及到了Dictionary下标(subscript)的使用与Optional的本质问题。Swift Standard Library中关于Dictionary下标语法的注释提到了:

If you assign nil as the value for the given key, the dictionary removes that key and its associated value.

那么问题来了,难道就不能使用下标语法赋予一个key nil值吗?

Optional的本质

我们很容易陷入一个误区,拿String类型为例,认为String?String进行了特殊设置的变种。但其实Optional是一个枚举类型。如果你在任何Swift文件中输入Optional,然后[⌘ + Click] 点击,你就会看到Optional的定义:

public enum Optional<Wrapped> : ExpressibleByNilLiteral {
    case none
    case some(Wrapped)
    ...
}

所以如果想要用下标给字典中的key赋予nil值,使用

dictionary["key"] = Optional<String>.none
//或者
dictionary["key"] = nil as String?

就可以了。

相关文章

网友评论

      本文标题:【Swift】Dictionary的下标语法与Optional的

      本文链接:https://www.haomeiwen.com/subject/sxyzrftx.html