在swift中`if var`和`if let`之间有什么不同?

时间:2015-05-29 09:39:28

标签: swift

考虑这两个代码:

if let myValue = myObject.value as NSString?{
 //logic here
}

vs

if var myValue = myObject.value as NSString?{
 //logic here
}

我知道let关键字定义了一个常量,这是否意味着第一行代码,如果myObject.value是NSString,那么myValue常量将会被生成?这看起来令人困惑。

5 个答案:

答案 0 :(得分:17)

如果您使用let,则无法更改myValue

if let myValue = myObject.value as NSString? {
    myValue = "Something else" // <-- Compiler error
}

另一方面,var可以。

if var myValue = myObject.value as NSString? {
    myValue = "Something else" // <-- It's fine
}

请注意,myValue仅存在于if的范围内,并且更改其值不会在其范围之外产生效果。

希望这有帮助。

答案 1 :(得分:6)

您使用let创建常量,因此在第一个示例中,您无法更改myValue

使用var时,myValue是一个可以在if语句中更改的变量。

答案 2 :(得分:0)

如果您使用let或var。

,则变量类型会有所不同

让我们是最终的,之后不能改变。 var是一个普通变量。

如果您在此声明中使用let,则无法更改或修改myValue。

答案 3 :(得分:0)

您所说的示例是可选绑定

可选绑定用于确定可选项是否具有值,如果是,则使该值可用作临时常量变量

if let myValue = myObject.value as NSString?{
 //logic here
}

如果存在常量,则上面的代码会提取myObject.value,而下面的代码会将myObject.value提取为变量

if var myValue = myObject.value as NSString?{
 //logic here
}

答案 4 :(得分:0)

“使用制作常量,使用 var 制作变量。 在编译时不需要知道常量的值,但是必须为其分配一次值。

这意味着您可以使用常量来命名您确定一次但在许多地方使用的值。

 var myVariable = 42
 myVariable = 50
 let myConstant = 42

常量或变量必须与要分配给它的值具有相同的类型。

但是,您并不总是必须明确地写入类型。在创建常量或变量时提供值可让编译器推断其类型。

在上面的例子中,编译器推断myVariable是一个整数,因为它的初始值是一个整数。

阅读:iBook Swift编程语言

谢谢。