1.在Swift中有没有一种方法来分配类似于这样的条件表达式:
let foo = if (bar == 2) {
100
} else {
120
}
字符串
1.可以使用switch/case
吗?
注1:我不不希望必须使用三元运算符)。
这种类型的赋值对函数式风格/不变性很好。在这种情况下,表达式有一个返回值。
**注2:**这是一个一般性的问题,这只是一个简化的例子,想象一下一个有很多值的开关情况,模式匹配等。你不能用三元运算符来做这些。
顺便说一句,也要注意,有些语言(如Scala)不支持三元运算符,因为if else返回一个值,所以它是不必要的。
3条答案
按热度按时间snz8szmq1#
你可以使用闭包来初始化一个不可变的:
字符串
使用闭包的好处是它是一个函数,所以你可以使用任何复杂的逻辑,以一种干净的方式实现,而不是通过嵌套的三元运算符。它可以是一个
switch
语句,它可以作为函数的返回值,然后通过一些计算获得,它可以是一个模式匹配的情况,它可以是它们的组合,等等。换句话说,它与使用函数的返回值初始化相同,但区别在于函数是内联的,而不是其他地方,具有可读性优势。
为了完整起见,如果变量是可变的,你可以使用延迟初始化:
型
所以你可以声明一个可变的变量,并在同一作用域中的任何地方初始化它,但是在使用它之前必须初始化变量。
更新:自Swift 2.0起,延迟初始化也支持immutables。
i1icjdpr2#
Swift 5.9增加了对
if
表达式的支持:SE-0380。这将允许:
字符串
vbopmzt13#
Swift 5.9
如果你只有一个条件需要检查,你可以使用一个简单
if/else
表达式的结果,就像你已经从Swift 5.9发布的那样。一行程序的版本如下所示:
字符串
对于更复杂的情况,您可以直接从
switch/case
表达式中赋值,如:型
为了回答的完整性,不要忘记你可以在Swift中对简单的表达式执行
ternary operator
:型
️尽管你可以混合使用以上方法,甚至使用闭包,但请根据表达式的复杂性选择所需的方法**,并尽量保持代码易于阅读。