Swift中有没有办法分配类似于此
的条件表达式let foo = if (bar == 2) {
100
} else {
120
}
(或用开关盒)。
(不想为此使用三元运算符。)
这种分配有利于功能风格/不变性。在这种情况下,表达式具有返回值。
注意:这是一个普遍的问题,这只是简化的例子,想象一下一个具有大量值,模式匹配等的开关盒。你不能用三元运算符做到这一点。
顺便说一下,有些语言不支持三元运算符,因为if else返回一个值,所以没有必要,参见例如Scala
答案 0 :(得分:13)
您可以使用闭包来初始化不可变的:
let foo: Int = {
if bar == 2 {
return 100
} else {
return 120
}
}()
使用闭包的优点在于它是一个函数,因此您可以使用任何复杂的逻辑,以干净的方式实现,而不是通过嵌套的三元运算符。它可以是switch
语句,它可以作为函数的返回值获得,然后进行一些计算,它可以是模式匹配的情况,它可以是它们的组合,等等。
换句话说,它与使用函数的返回值进行初始化相同,但区别在于函数是内联函数而不是其他函数,具有可读性。
为了完整性,如果变量是可变,则可以使用延迟初始化:
var foo: Int
// Any statement here
if bar == 2 {
foo = 100
} else {
foo = 120
}
// Other statements here
myFunc(foo)
所以你可以声明一个可变变量,并在同一范围内的任何地方初始化它,但在使用之前必须初始化变量。
更新:自Swift 2.0起,延迟初始化也适用于不可变项。