快速过滤功能

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

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

最佳答案

不要在 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/

相关文章:

ios - 隐藏导航栏时显示状态栏

ios - swift 。 SIGABRT : cast value of type '__NSCFDictionary' to 'NSMutableArray'

android - Swift:WKWebView 添加像 Android 一样的 javascript 界面

ios - 如何将 SFSafariViewController 与 SwiftUI 一起使用?

ios - 使用当前上下文作为演示样式时一起关闭多个 ViewController

arrays - 快速将字符串数组转换为 Double

iOS 新接触式 Swift 中的 Segue

swift - 如何沿圆形路径旋转 Sprite ?

成为第一响应者后,添加到文本字段的 Swift 手势识别器无法操作?

swift - 如何在 Xcode7 的 UITests 下找到带谓词的按钮?