首页 > 解决方案 > 在 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

他们是否有任何方式来提升向外一级的范围,或者其他方式通常处理这种情况?

标签: swift

解决方案


您可以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
}

推荐阅读