我有一个字典表示提取请求正在返回。然后将此词典转换为[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],[:]]
答案 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"] }
我担心即使是上面的,虽然编译和运行,但可能不是你真正需要的。字典数组是一个很奇怪的东西,可以从托管对象中删除...