从Swift词典中解包选项时如何检查null?

时间:2017-11-28 19:12:03

标签: ios swift dictionary null optional

我熟悉用于展开选项的if let ..模式并经常使用它来检查nil,但是当在Swift中处理字典时,模式似乎已经崩溃了。有人可以解释为什么以下在Swift 4中不起作用? ......以下片段是Playground Ready!™

import UIKit

let test: Any? = nil

if let _ = test {
    print("This works as expected and does not print")
}

//let d1: [String: Any] = ["foo": "fooval", "bar": NSNull()]

let d2: [String: Any?] =  ["foo": "fooval", "bar": NSNull(), "flim": nil]


if let _ = d2["flim"] {
    print("I don't expect this to print but it does")
}

最终我想扩展Dictionary,以便对JSON解析/编码进行空检查,它可以处理两个缺失值(从密钥AFAIK返回nil)和JSON null值。 guess return NSNull(至少在编码时需要什么来获取JSON空值)。这是我到目前为止所拥有的

extension Dictionary  where Key == String {

    func isNullOrEmpty(key: String) -> Bool {

        // Value is NSNull instance
        if let _ = self[key] as? NSNull {
            return true
        }
        // Test if value is optional and null
        if let _ = self[key] {
            return false
        }
        // Test if key/value is missing altogether
        if self[key] == nil {
            return true
        }
        return false
    }
}

0 个答案:

没有答案