Swift:Dictionary,删除键和值为零

时间:2016-07-24 23:48:07

标签: swift dictionary

我有一个字典表示提取请求正在返回。然后将此词典转换为[String: NSDate]的日期数组。此词典的值为[:]。我无法做任何事情去除它。任何人都可以帮忙,因为我花了两个晚上尝试一切。

  let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]]
  print("results \(results)")     
  dates = results.map { $0["savedTime"]! as NSDate }

由于savedTime密钥为零而失败

打印结果

  

[[“savedTime”:2016-07-19 23:00:00 +0000],[:]]

1 个答案:

答案 0 :(得分:3)

此构造$0["savedTime"]!错误。将!放在对象上意味着您知道对象将始终存在,但它并不总是存在。你对编译器说谎,所以它崩溃了。请尝试删除!

此外,放置as NSDate是不必要的,因为您已经告诉编译器上面的行中的值是NSDates。最后,由于并非所有词典都具有正确的密钥,因此您需要删除任何不正确的密钥。有几种方法可以做到这一点,一种方法是过滤掉nils。另一种方法是使用flatMap同时转换和过滤掉nils。

然后你最终得到了以下内容。

let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]]
print("results \(results)")
dates = results.flatMap { $0["savedTime"] }

我担心即使是上面的,虽然编译和运行,但可能不是你真正需要的。字典数组是一个很奇怪的东西,可以从托管对象中删除...