Dictionary中的Optional

在使用Dictionary的时候,有时候你会出现如下代码:

var dict1: [String: Int?] = ["One": 1, "Two": 2, "Three": 3]
dict1["One"] = nil
for (key, value) in dict1 {
    print("\(key) -> \(value)")
}

当然你的目的很简单,只是让key = "One" 对应的 value 为nil,但是运行一下你很快看到了意想不到的结果

Three -> Optional(3)
Two -> Optional(2)

对应的"One"竟然被字典remove了, 其实想通了也很简单,其实你创建的字典双可选,首先字典里拥有对应的value就是一个可选了,然后你设置的value为Int? 又是一个可选,因此你第一次创建的nil其实是让key对应的value为nil了, 也就意味着这个key没有对应的value,被字典remove了。但是我们如何让key对应的value还存在,而把value的值改为nil,让我们来看一下正确的代码:

var dict1: [String: Int?] = ["One": 1, "Two": 2, "Three": 3]
dict1["One"] = .Some(nil)
for (key, value) in dict1 {
    print("\(key) -> \(value)")
}

在nil外再包一层也就意味着key对应的value存在但是value得值是nil了,这样这个key也不会被字典remove了,让我们再一次运行一下:

One -> nil
Three -> Optional(3)
Two -> Optional(2)

字典中的所有元素仍然存在,只是One所对应的value为nil了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,827评论 0 9
  • 53.计算字符 在字符串中获取字符值的数量, 可以使用字符串字符属性中的计数属性: let unusualMena...
    无沣阅读 1,151评论 0 4
  • 题目来源轮廓线问题,具体解释见这里,解释的特别详细。然后实际上要注意的是每个建筑的顶上两点,然后注意用负值区分是左...
    我叫胆小我喜欢小心阅读 339评论 0 0
  • 对于我是不是真的有病,我要好好想想,为什么会一直低落,暗示自己过的不快乐,没有可以倾诉的地方,自己默默记录下来。真...
    发呆的李相赫阅读 150评论 0 0