Swift:字典,删除键和值为零

Swift: Dictionary, Remove key and value that are nil

我有一个字典,其中有一个提取请求正在返回。然后将此字典编入[String: NSDate]中的日期数组。该词典的值为[:]。我无法采取任何措施将其删除。任何人都可以帮忙,因为我已经花了两个晚上尝试了一切。

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

由于saveTime键为nil,此操作失败

打印结果为

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


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

此外,不必放置as NSDate,因为您已经告诉编译器上一行中的值是NSDates。最后,由于并非所有词典都具有正确的键,因此您需要删除所有不正确的键。有两种方法可以做到这一点,其中一种就是滤除钉子。另一种方法是使用flatMap,它可以同时转换和滤除nil。

然后您将得到以下内容。

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

我很担心,即使上面的内容可以编译并运行,但实际上可能不是您真正需要的。字典数组要从ManagedObjectContext ...

中抽出是一件很奇怪的事情。