在Swift

时间:2018-08-23 18:12:09

标签: 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

他们是通过某种方式来扩大对外开放的范围,还是以其他方式通常处理这种情况?

2 个答案:

答案 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())