Swift:字典,删除零的键和值
Posted
技术标签:
【中文标题】Swift:字典,删除零的键和值【英文标题】:Swift: Dictionary, Remove key and value that are nil 【发布时间】:2016-07-24 23:48:06 【问题描述】:我有一个获取请求正在返回的字典。然后将该字典放入来自[String: NSDate]
的日期数组中。该字典的值为[:]
。我无法做任何事情来删除它。任何人都可以帮忙,因为我已经花了两个晚上尝试一切。
let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]]
print("results \(results)")
dates = results.map $0["savedTime"]! as NSDate
由于 savedTime Key 为 nil 导致失败
打印结果是
[[“保存时间”:2016-07-19 23:00:00 +0000],[:]]
【问题讨论】:
是的,我知道。对不起,我忘了问如何从字典中删除 [:]。 【参考方案1】:这个构造$0["savedTime"]!
是错误的。将!
放在对象上意味着您知道该对象将始终存在,但并不总是存在。你在对编译器撒谎,所以它正在崩溃。尝试删除!
。
此外,没有必要放置as NSDate
,因为您已经在上面的行中告诉编译器这些值是NSDates。最后,由于并非所有字典都有正确的键,因此您需要删除任何不正确的键。有几种方法可以做到这一点,一种是过滤掉 nil。另一种是使用 flatMap 来同时转换和过滤掉 nil。
然后你会得到下面的结果。
let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]]
print("results \(results)")
dates = results.flatMap $0["savedTime"]
我担心即使是上面的,虽然它编译和运行,可能不是你真正需要的。从 managedObjectContext 中取出字典数组是一件相当奇怪的事情......
【讨论】:
谢谢你的工作。我已经将 ManagedObjectContext 用于 tableview 等,但是为了获取值数组以获取平均值等,我偶然发现了字典,到目前为止它们似乎运行良好。以上是关于Swift:字典,删除零的键和值的主要内容,如果未能解决你的问题,请参考以下文章