我正在尝试删除字典中键的空值 所以我有这样的数据:
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)})
无法理解上述过滤函数的语法
答案 0 :(得分:0)
不要在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的块来实现:
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
参数。对于字典,这是一个包含键和值的元组。要访问未命名元组的成员,请使用.0
,.1
,.2
等,具体取决于元组成员的索引。因此对于词典Self.Generator.Element
是一个包含键和值的元组。所以$ 0.1指的是键值对的值。希望这会稍微清除这种奇怪的语法。