swift - 在 Swift 中使用条件逻辑设置不可变变量
问题描述
关于在 Swift 中正确执行此操作的最佳方式(即样式),我有一个超级简单的问题。
if a > b {
let x = 1
} else {
let x = 2
}
//then procede to use x
显然,这行不通,因为 x 的范围仅在 if 的每个分支内。但是,如果我希望 x 是不可变的,那么解决这个问题的首选方法是什么?到目前为止,我一直在这样做:
var x:Int
if a > b {
x = 1
} else {
x = 2
}
//then procede to use x
这有效,但将 x 保留为可变的。下一个选择是使用三元运算符,如下所示:
let x = a > b ? 1 : 2
这使得 x 不可变,但是当条件和结果值变得复杂时,在可读性方面还有一些不足之处。此外,使用三元解决方案完全失败了一个更复杂的例子:
if a > b {
let x = 1
} else if b > c {
let x = 2
} else {
let x = 3
}
}
//procede to use x
或这个:
switch a {
case 1:
let x = 1
case 2:
let x = 2
default:
let x = 3
}
//procede to use x
他们是否有任何方式来提升向外一级的范围,或者其他方式通常处理这种情况?
解决方案
您可以let
在第二个示例中使用:
let x:Int
if a > b {
x = 1
} else {
x = 2
}
只要x
在所有路径中完全初始化,就可以了。
它也适用于switch
:
let a = 3
let x: Int
switch a {
case 1:
x = 1
case 2:
x = 2
default:
x = 3
}