将非可选的Any与nil进行比较总是假的?

时间:2016-11-18 20:41:02

标签: swift

我正在浏览[String: Any]字典,寻找nil,因此我可以用NSNull替换它们以进行JSON写入。我的预编译器警告告诉我,将Anynil进行比较将始终为false,但我知道它至少包含两个从未找到的nils。有没有办法检查Any是否为零?

3 个答案:

答案 0 :(得分:10)

可选可以是nil。其他任何事情都不可能是nilAny不是可选的。因此,将Anynil进行比较是没有意义的。测试永远不会成功。

如果你知道这些东西可能是Optionals,你应该输入Any?。这是一个可选项,可以与nil进行比较。这是一个简单的例子:

    let s : String? = nil
    let any : Any? = s
    if any == nil {
        print("nil") // nil
    }

如您所见,测试成功。

(尽管如此,如果可能的话,更准确地输入东西会更好。)

答案 1 :(得分:1)

我已经使用波纹管表达式解决了这个问题:

let filteredResult = dictionary.filter { !(($0.value as AnyObject) is NSNull) }

答案 2 :(得分:0)

if(object_getClass(yourVariable)?.description() == "NSNull") 可以是检查的方法之一。