2017-05-29 86 views
-1

我在我的项目中有以下代码。迭代字典swift 3

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) 
     } 
    } 

我的问题是我如何使循环可选的键和值,或检查它们中的任何一个是否为零? 我无法检查它们是否为零,因为它是非可选的,所以发出警告说任何不能为零。

我想使用类似 为(键:字符串?值:字符串){}

但它无法正常工作。

+1

你如何声明你的'photoDic'? –

+0

lazy var photoDic:NSDictionary = NSDictionary.init(contentsOf:URL.init(string:“http://www.raywenderlich.com/downloads/ClassicPhotosDictionary.plist”)!)! –

+0

字典的“关键字”永远不能为零,“for in”总是迭代非零值。 –

回答

1

字典中的键不能是可选的。 (密钥必须符合Hashable协议,自选不知道。)所以,你如果你希望你的字典的值是Optionals,那么你需要CAN NOT使你的字典可选

键将其声明为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?]。)

0

前面已经提到的所有按键字典有非定义

而且在NSDictionary所有值非可选定义了。

感到高兴,由于

  • 没有必要检查nil
  • 该代码永远不会崩溃。

一个Swift字典理论上可以包含可选值,但实际上你不鼓励使用它。出于兼容性原因,以NSDictionary a nil值表示键丢失