Swift 小心字典Value等于nil(容易出错)

2022-05-06 17:13:04 浏览数 (1)

看书的时候看到 下面一段代码:

代码语言:javascript复制
 var dicWithNils:[String:Int?] = [
    "one":1,
    "two":2,
    "none":nil
]

现在要求把two这个key的值变成nil

错误答案:

代码语言:javascript复制
dicWithNils["two"] = nil

它将会把 “two” 这个键移除。


正确答案:

我们可以使用下面中的任意一个来改变这个键的值,你可以选择一个你觉得清晰的方式,它们 都可以正常工作:

代码语言:javascript复制
dictWithNils["two"] = Optional(nil)
dictWithNils["two"] = .some(nil)
dictWithNils["two"]? = nil
dictWithNils // ["none": nil, "one": Optional(1), "two": nil]

注意上面的第三个版本和其他两个稍有不同。它之所以能够工作,是因为 “two” 这个键已经存 在于字典中了,所以它使用了可选链的方式来在获取成功后对值进行设置。现在来看看对于不 存在的键进行设置会怎么样:

代码语言:javascript复制
 dictWithNils["three"]? = nil 
 dictWithNils.index(forKey: "three") // nil

你可以看到,当把 “three” 设置 nil 时,并没有值被更新或者插入。

0 人点赞