【问题标题】:Setting an immutable variable with conditional logic in Swift在 Swift 中使用条件逻辑设置不可变变量
【发布时间】:2018-08-23 18:12:08
【问题描述】:

关于在 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


【解决方案1】:

您可以在第二个示例中使用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
}

【讨论】:

    【解决方案2】:

    您也可以使用类来实现它。 像这样

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-22
      • 2018-12-09
      • 2021-04-20
      • 1970-01-01
      • 2022-01-03
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多