我熟悉用于展开选项的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
}
}