美文网首页
【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