【问题标题】:Iterating dictionary swift 3迭代字典swift 3
【发布时间】:2017-10-29 19:53:13
【问题描述】:

我的项目中有以下代码。

 for (key, value) in photoDic {
        if  let url = URL.init(string: value as! String){
        let photo : PhotoRecord = PhotoRecord.init(name:key as! String, url:url)
        self.photoRecords.append(photo)
        }
    }

我的问题是如何使 for 循环中的键和值成为可选的,或者检查它们中的任何一个是否为 nil? 我无法检查它们是否为 nil,收到警告说 any 不能为 nil,因为它是非可选的。

我正在考虑使用类似的东西 for(key:String?, value:String?){}

但它不起作用。

【问题讨论】:

标签: swift dictionary iteration optional


【解决方案1】:

字典中的键不能是可选的。 (键必须符合 Hashable 协议,而可选项则不符合。)所以您不能将字典中的键设为可选

如果您希望字典的值为Optionals,则需要将它们声明为Optionals

所以,例如,改变

let photoDic: [String: String] = ["key1": "http://www.someDomain.com/image.jpg"]

let photoDic: [String: String?] = ["key1": "http://www.someDomain.com/image.jpg"]

(注意photoDic的类型改为[String: String?]。)

【讨论】:

    【解决方案2】:

    如前所述,字典中的所有键根据定义是非可选的

    NSDictionary 中的进一步说明所有值根据定义也是非可选的

    为此感到高兴,因为

    • 无需检查nil
    • 代码永远不会崩溃。

    理论上,Swift 字典可以包含可选值,但实际上不鼓励您使用它。出于对NSDictionary 的兼容性原因,nil 值表示缺少密钥

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 1970-01-01
      • 2014-09-12
      • 2016-01-04
      • 1970-01-01
      • 2015-10-03
      • 2017-07-18
      • 2017-02-12
      • 2015-07-07
      相关资源
      最近更新 更多