Swift 从 NSDictionary 读取数据

Posted

技术标签:

【中文标题】Swift 从 NSDictionary 读取数据【英文标题】:Swift read data from NSDictionary 【发布时间】:2015-10-27 11:46:55 【问题描述】:

我正在使用此代码从NSDictionary 读取数据:

let itemsArray: NSArray = response.objectForKey("items") as! NSArray;
let nextPageToken: String = response.objectForKey("nextPageToken") as! String

var videoIdArray: [String] = []

for (item) in itemsArray 
      let videoId: String? = item.valueForKey("id")!.valueForKey("videoId") as? String
      videoIdArray.append(videoId!)

但是当我 itemsnextPageToken 不存在时,我收到此错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

知道为什么吗?我该如何解决?

【问题讨论】:

删除; (分号)在第一行。 @MTA NSDictionary objectForKey: 如果密钥不存在,则返回 nil。我很确定键是区分大小写的。 How to check dictionary value is empty or not的可能重复 【参考方案1】:

您的代码中有两个问题:

    您正试图强制解开一个可以为 nil 的可选项。如果您不确定数据是否可用,切勿使用强制解包。 您正在使用valueForKey: 而不是objectForKey: 从字典中检索数据。使用 objectForKey: instead of valueForKey: 从字典中获取数据。

您可以通过以下方式修复崩溃:

let itemsArray: NSArray?   = response.objectForKey("items") as? NSArray;
let nextPageToken: String? = response.objectForKey("nextPageToken") as? String

var videoIdArray: [String] = []
if let itemsArray = itemsArray

    for (item) in itemsArray
    
       let videoId: String? = item.objectForKey("id")?.objectForKey("videoId") as? String
       if (videoId != nil)
       
          videoIdArray.append(videoId!)
       
     

【讨论】:

嗨,我正在使用相同的代码从 NSDictionary 中检索对象值,但它显示错误。 swift 3有新的更新吗?

以上是关于Swift 从 NSDictionary 读取数据的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 NSDictionary 到 Dictionary 的转换导致 NSInvalidArgumentException

如何在 Swift 中从 NSDictionary 生成 JSON 数据

使用 Swift 将 JSON 字符串转换为 NSDictionary

从 Swift 中的 NsDIctionary 获取价值

从 NSDictionary 访问数据

Swift:解析 JSON,NSDictionary 的 NSDictionary