Ios 为什么(nil)被评估为true?

Ios 为什么(nil)被评估为true?,ios,swift,Ios,Swift,我试图检查NSDictionary中是否存在密钥,然后处理该情况。但是,当值为零时,为什么满足这种情况 results: NSDictionary println(results) 打印此文件: { error = ( { code = 402; message = "User exists for this email"; username = "xyz@gmail.com"; }

我试图检查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?");
    }
这里if(nil)应该失败,但它不是。 我还尝试使用results.valueForKey(“results”)、results.objectForKey(“results”),但它们都给出了例外

如果我使用此选项,它将崩溃并出现运行时错误:

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

这不是我看到的行为。下面的代码按预期打印出“我所期望的”

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

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

你的问题中肯定还有其他问题没有涉及。

我看到的不是这种行为。下面的代码按预期打印出“我所期望的”

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

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

你的问题中肯定还没有涉及到其他问题。

我正在一个操场上试着这样做:

// 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. 
}

因此,你的程序中肯定有其他地方导致了这种情况。

我正在操场上尝试:

// 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. 
}

因此,您的程序中肯定有其他地方导致了这种情况。

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


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

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


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

如果让dict=results[“results”]尝试过,仍然会崩溃。崩溃?这是一个编译器错误,提交一个雷达。在你的问题中,你说程序输入
if
语句。它是这样做的还是崩溃了?是的,它在EXC_BAD_指令下崩溃了,这很奇怪。应该很简单,检查键是否以这种方式存在。如果让dict=results[“results”]尝试过,仍然会崩溃。崩溃?这是一个编译器错误,提交一个雷达。在你的问题中,你说程序输入
if
语句。它是这样做的还是崩溃了?是的,它在EXC_BAD_指令下崩溃了,这很奇怪。因为它应该是简单的,检查键是否以这种方式存在。我在上面的问题中打印了NSDictionary。我不明白为什么它不在这里工作。我刚刚尝试了同样的代码,它在if(results[“baz”])行崩溃,只有一个例外:EXC_BAD_指令(code=EXC_I386_INVOP,subcode=0x0)。我在上面的问题中打印了NSDictionary。无法理解为什么它在这里不起作用。我刚刚尝试了相同的代码,它在if(results[“baz”])行崩溃,只有一个例外:EXC_BAD_指令(code=EXC_I386_INVOP,subcode=0x0)。