Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:如何比较“中的可选项”;如果;条款_Ios_Swift_If Statement_Compare_Optional - Fatal编程技术网

Ios Swift:如何比较“中的可选项”;如果;条款

Ios Swift:如何比较“中的可选项”;如果;条款,ios,swift,if-statement,compare,optional,Ios,Swift,If Statement,Compare,Optional,我正在练习用数组建树 我有一个类节点。每个节点都有一个ID和一个父ID。如果节点是顶级节点,则父ID可以为零。因此,我将家长ID设置为可选 然后我手动(出于测试目的)创建了一个包含多个树的节点数组。因此,存在多个父ID为nil的节点 然后我创建了一个函数,该函数根据节点的父ID查找节点 我没有抱怨。但是,当在iPhone模拟器中运行时(我尝试在tableview中显示节点),函数中的if子句会显示一条消息: 致命错误:在展开可选值时意外发现nil 请帮忙。谢谢 这是代码。 (出于我自己的习惯,我

我正在练习用数组建树

我有一个类节点。每个节点都有一个ID和一个父ID。如果节点是顶级节点,则父ID可以为零。因此,我将家长ID设置为可选

然后我手动(出于测试目的)创建了一个包含多个树的节点数组。因此,存在多个父ID为nil的节点

然后我创建了一个函数,该函数根据节点的父ID查找节点

我没有抱怨。但是,当在iPhone模拟器中运行时(我尝试在tableview中显示节点),函数中的if子句会显示一条消息:

致命错误:在展开可选值时意外发现nil

请帮忙。谢谢

这是代码。 (出于我自己的习惯,我在每行末尾写“;”


您的find函数声明为

func findNodes(parent:Int!) -> [Node]
其中参数声明为隐式展开可选, 因此,它将在每次访问时展开。如果您想通过
nil
作为参数,“正常”选项更有意义:

func findNodes(parent:Int?) -> [Node] {
    var arr:[Node] = [];
    for node in allNodes {
        if node.parent == parent {
            arr.append(node);
        }
    }
    return arr;
}
请注意,您可以将代码简化为(Swift 1.2):

声明
parent
属性也更有意义 在
节点
类中,如果
nil
是“预期”值,则将其作为可选值:

或者是指向父节点的(可选)指针:

var parent : Node?

但现在这与你的问题无关。

谢谢你,马丁·R,这对我很有用!我是斯威夫特的新手。我最初将其设置为隐式展开的可选项,因为我认为这样每次访问它时都会更容易。让我问另一个愚蠢的问题:这是否意味着可选可以为零,而隐式展开可选不应该为零?是的,我想使用您最后的建议“var parent:Node?”,但后来发现如果有一天我需要,我不知道如何将其存储在数据库中,所以我放弃了,而是使用了Int-ID…@golddc:看看隐式展开选项的可能用例。@golddc:而不是
node.parent
您将存储
nod.parent?.ID
,只是我的2ct。
func findNodes(parent:Int?) -> [Node] {
    return filter(allNodes) { $0.parent == parent };
}
class Node {
    var id : Int;
    var parent : Int?;
    init(id:Int, parent : Int?) {
        self.id = id;
        self.parent = parent;
    }
}
var parent : Node?