考虑这两个代码:
if let myValue = myObject.value as NSString?{
//logic here
}
vs
if var myValue = myObject.value as NSString?{
//logic here
}
我知道let关键字定义了一个常量,这是否意味着第一行代码,如果myObject.value
是NSString,那么myValue
常量将会被生成?这看起来令人困惑。
答案 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编程语言
谢谢。