Swift:如果不等于nil则设置变量

时间:2017-06-19 06:20:15

标签: swift optional var

我正在使用Swift,我想知道如何在一行代码中实现这一目标:

If a != nil, myVariable = a

else if a == nil, myVariable = b

我需要这样做才能适合

var myVariable = a {
    didSet{
        //Do something
    }
}

有没有办法在一行中执行此操作,因此我不必在别处更改它并触发didSet {}?

这样的事情:

if var myVariable = a 
else myVariable = b {
    didSet{
        //Do something
    }
}

或者...

var if a != nil {myVariable = a}
else {myVariable = b} {
    didSet{
        //Do something
    }
}

我知道这可能需要一些时间来实现我的意思,我尽力解释它。

编辑---> 编译器说:

  

零合并算子的左侧' ??'有一个非可选类型' [[Bool]]',所以从不使用右侧

  

对待强迫垮掉的人[' [[Bool]]'作为可选项永远不会产生' nil'

这就像使用合并运算符一样:

var purchased =
UserDefaults.standard.array(forKey: "purchased") as! [[Bool]] ?? 
[[true, false], [true, false], [true, false], [true, false], [true, false]] { //a is left, b is right
    didSet {
        //Do something
    }
}

任何想法都将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:4)

怎么样

var myVariable = a ?? b

这将myVariable设置为a,除非a == nil,然后将myVariable设置为b。 didSet将使用相应的值调用一次。它被称为"零合并算子"。

您编辑的问题表明,在您的情况下,a不能为零,因为您强行打开数组(使用as!)。相反,你应该有条件地打开它(作为?),以便你的代码可以检查nil并使用硬编码的默认值。

答案 1 :(得分:0)

//Sets my variable to a if a != nil, else b.
var myVaraiable = (a != nil ? a : b)

由于a是可选的而b不是,它更像是

var myVariable = (a != nil ? a! : b)