Swift: 如果不等于 nil 则设置变量
Swift: Setting variables if not equalling nil
我正在使用 Swift,我想知道如何在 1 行代码中实现这一点:
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
}
}
我知道这可能需要一些时间才能理解我的意思,我已尽力解释。
编辑 --->
编译器说:
Left side of nil coalescing operator '??' has a non-optional type '[[Bool]]', so the right side is never used
和
Treating a forced downcast to '[[Bool]]' as optional will never produce '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 将使用相应的值调用一次。它被称为 "nil coalescing operator".
您编辑的问题表明,在您的情况下,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)
我正在使用 Swift,我想知道如何在 1 行代码中实现这一点:
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
}
}
我知道这可能需要一些时间才能理解我的意思,我已尽力解释。
编辑 ---> 编译器说:
Left side of nil coalescing operator '??' has a non-optional type '[[Bool]]', so the right side is never used
和
Treating a forced downcast to '[[Bool]]' as optional will never produce '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 将使用相应的值调用一次。它被称为 "nil coalescing operator".
您编辑的问题表明,在您的情况下,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)