我有一个关于在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
他们是通过某种方式来扩大对外开放的范围,还是以其他方式通常处理这种情况?
答案 0 :(得分:2)
您可以在第二个示例中使用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
}
答案 1 :(得分:1)
您也可以使用类来实现。 像这样
class immutableVariable{
private var value: Any
init(newValue: Any = "") {
self.value = newValue
}
func changeValue(withNewValue newValue: Any){
self.value = newValue
}
func getValue() -> Any{
return value
}
}
然后称呼它
let x = immutableVariable()
if a > b{
x.changeValue(withNewValue: 1)
}else{
x.changeValue(withNewValue: 2)
}
并使用
访问值print(x.getValue())