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



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

If a != nil, myVariable = a
else if a == nil, myVariable = b

我需要这样做,以便它适合

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

有没有办法在 1 行中执行此操作,这样我就不必在其他地方更改它并触发 didSet{}?

像这样:

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

或。。。

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

我知道这可能需要一些时间才能意识到我的意思,我尽力解释它。

编辑--->编译器说:

nil 合并运算符 '??' 的左侧具有非可选类型 '[[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
    }
}

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

怎么样

var myVariable = a ?? b

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

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

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

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

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

相关内容

最新更新