我正在尝试删除字典中键的空值 所以我有这种数据:
let dic = ["FirstName": "Anvar", "LastName": "Azizov", "Website": NSNull(),"About": NSNull()]
let array = [dic,2,3,4]
let jsonResult:[String: AnyObject] = ["FirstName": "Anvar", "LastName": "Azizov", "Website": array,"About": NSNull()]
let jsonCleanDictionary = filter(jsonResult, {!($0.1 is NSNull)})
无法理解上述过滤函数的语法
最佳答案
不要在 swift 中使用 NSNull() 而是更喜欢使用 nil
。此外,由于它的字典添加具有空值的键是非常无用的,因为如果键不存在,字典将返回 nil 。所以当检查 null 时,你所要做的就是
if let some = dic["key"] as? Value {
// some now contains the value inside dic's key as a value type of Value.
}
过滤器函数也通过获取一个返回 bool 值的 block 来工作:
dict.filter { (key, value) -> Bool in
// Do stuff to check key and value and return a
// bool which is true if you want that key, value pair to
// appear in the filtered result.
}
如果没有显式返回,在 swift 闭包参数中可以获得匿名名称。这些名称的格式为 $0
、$1
等。现在,过滤器函数只接受来自 Self.Generator.Element
的参数CollectionType
协议(protocol)。对于字典,这是一个包含键和值的元组。要访问未命名元组的成员,您可以使用 .0
、.1
、.2
等,具体取决于元组成员的索引。所以对于字典来说,Self.Generator.Element
是一个包含键和值的元组。所以 $0.1 指的是键值对的值。希望这能稍微清除这种奇怪的语法。
关于快速过滤功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31603536/