我正在使用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
}
}
任何想法都将不胜感激。谢谢。
答案 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)