Swift过滤功能

时间:2015-07-24 06:21:23

标签: swift

我正在尝试删除字典中键的空值 所以我有这样的数据:

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)})

无法理解上述过滤函数的语法

1 个答案:

答案 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指的是键值对的值。希望这会稍微清除这种奇怪的语法。