为什么(nil)被评估为真?

时间:2014-07-03 20:25:54

标签: ios swift

我正在尝试检查NSDictionary中是否存在密钥,然后处理该案例。但是,当值为零时,为什么这个案例得到满足?

results: NSDictionary
println(results)

打印出来:

{
    error = (
        {
            code = 402;
            message = "User exists for this email";
            username = "xyz@gmail.com";
        }
    );
}

但是当我检查if块时,为什么会进入?

    if(results["results"])
    {
      println("why here?");
    }

这里如果(nil)失败,但不是。 我也尝试使用results.valueForKey(“results”),results.objectForKey(“results”),但所有这些都给出了异常。

如果我使用它,它会因运行时错误崩溃:

if let dict: results["results"]

更新: 刚刚发现控件在第一次正确计算后跳转到函数的开头,然后发生运行时。那么为什么函数循环两次然后崩溃?

3 个答案:

答案 0 :(得分:3)

这不是我所看到的行为。以下代码按预期打印"just what I expect"

let results: NSDictionary = ["foo": "bar"]

if results["baz"] {
    println("why here?");
} else {
    println("just what I expect");
}

你的问题中没有涉及的其他内容。

答案 1 :(得分:1)

我在操场上尝试这个:

// Playground - noun: a place where people can play

import UIKit

var results = ["foo": "fooVar", "bar": "barVar"]
// ["foo": "fooVar", "bar": "barVar"]

results["foo"]
// {Some "fooVar"}

results["baz"] == nil
// true

if results["baz"]
{
    "hi"
    // not shown
}
else
{
    "seems to be working"
    //shown. 
}

所以你的程序中必须有其他东西导致这种情况。

答案 2 :(得分:0)

正如@Undo在上面的答案中提到的那样,它在函数的后半部分确实存在问题,并且以不正确的方式抛出异常JSON数据被解析为NSDictionary。但是,xcode没有显示异常发生的位置,而是尝试跟踪函数并在函数的退出点显示异常。

修复JSON解析,删除了错误。最好编写适当的错误处理程序以避免这种问题。