考虑这两个代码:
if let myValue = myObject.value as NSString?{
//logic here
}
与
if var myValue = myObject.value as NSString?{
//logic here
}
我知道let关键字是用来定义常量的,那么这是否意味着在代码的第一行,如果myObject.value
是NSString类型,myValue
常量就会被创建?这看起来很令人困惑。
考虑这两个代码:
if let myValue = myObject.value as NSString?{
//logic here
}
与
if var myValue = myObject.value as NSString?{
//logic here
}
我知道let关键字是用来定义常量的,那么这是否意味着在代码的第一行,如果myObject.value
是NSString类型,myValue
常量就会被创建?这看起来很令人困惑。
如果您使用 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
的范围内,并且更改其值不会对其范围外产生影响。test
的值。你改变了被 test
引用的值。这是不同的。我认为我的句子是正确的:如果你改变 myValue
的值,你不会在其作用域之外产生影响。 - Luca AngelettiClass
时,我们有引用类型(Reference Type)
,而当我们使用Struct
、Enum
或Tuple
时,我们有值类型(Value Type)
。但请注意,这并不改变我的答案。myValue
可以是一个类、结构体、枚举或元组。如果我在IF
内部更改它的值(我的意思是写myValue = something
),那么效果不会传播到IF外部。 - Luca Angelettiif let myValue = ...
不允许您通过 myValue
更改所引用的对象。也就是说,在块内,myValue.someProperty = aValue
将生成编译器错误,就像尝试分配给 myValue
本身一样。 - Ted Hopp使用 let
创建一个常量,在第一个例子中,你不能更改 myValue
。
当使用 var
时,myValue
是一个变量,你可以在 if
语句内部更改它。
变量类型取决于您使用let还是var。
let是最终的,之后不能更改。 var是普通变量。
如果在此语句中使用let,则无法更改或修改您的myValue。
if let myValue = myObject.value as NSString?{
//logic here
}
myObject.value
(如果存在)作为一个常量,而下面的代码将提取myObject.value
作为一个变量。if var myValue = myObject.value as NSString?{
//logic here
}
var myVariable = 42
myVariable = 50
let myConstant = 42
常量或变量必须与要分配给它的值具有相同的类型。
但是,您并不总是需要明确地编写类型。在创建常量或变量时提供一个值可以让编译器推断其类型。
在上面的示例中,编译器推断myVariable是一个整数,因为它的初始值是一个整数。
阅读:iBook 《Swift编程语言》
谢谢。
let
和var
有什么区别? 的重复问题。 - Krzakif let
和if var
是有区别的。 - Duncan C