在苹果的Swift语言中,let和var有什么区别?
在我的理解中,它是一种编译语言,但它不在编译时检查类型。这让我很困惑。编译器如何知道类型错误?如果编译器不检查类型,这不是生产环境的问题吗?
当我试图给let赋值时给出了这个错误:
不能给属性赋值:'variableName'是一个'let'常量 将'let'改为'var'使其可变
在苹果的Swift语言中,let和var有什么区别?
在我的理解中,它是一种编译语言,但它不在编译时检查类型。这让我很困惑。编译器如何知道类型错误?如果编译器不检查类型,这不是生产环境的问题吗?
当我试图给let赋值时给出了这个错误:
不能给属性赋值:'variableName'是一个'let'常量 将'let'改为'var'使其可变
当前回答
Var是一个变量,你可以在任何时间任意改变它
例如
var changeit:Int=1
changeit=2
//changeit has changed to 2
Let是不变的,不能改变
例如
let changeit:Int=1
changeit=2
//Error becuase constant cannot be changed
其他回答
在var的情况下,值可以被重新赋值
//Variables
var age = 42
println(age) //Will print 42
age = 90
println(age) //Will Print 90
** newAge常量不能被重新赋给一个新值。尝试这样做会给出一个编译时错误**
//Constants
let newAge = 92 //Declaring a constant using let
println(newAge) //Will print 92.
关键字var用来定义一个变量,你可以像这样轻松地修改它的值:
var no1 = 1 // declaring the variable
no1 = 2 // changing the value since it is defined as a variable not a constant
但是,let关键字仅用于创建一个常量,当您不想再次更改常量的值时使用。如果你试图改变常数的值,你会得到一个错误:
let no2 = 5 // declaring no2 as a constant
no2 = 8 // this will give an error as you cannot change the value of a constant
用可变性/不可变性概念来陈述这种差异可能更好,这是对象空间中值和实例可变性的正确范式,比唯一的“常量/变量”通常概念更大。 而且这更接近于Objective C的方法。
2 .数据类型:值类型和引用类型。
在值类型的上下文中:
'let'定义一个常量(不可变)。'var'定义了一个可变值(mutable)。
let aInt = 1 //< aInt is not changeable
var aInt = 1 //< aInt can be changed
在参考类型中:
数据的标签不是值,而是对值的引用。
if Person = Person(名称:Foo,第一个:Bar)
person不包含此人的数据,但包含此人数据的引用。
let aPerson = Person(name:Foo, first:Bar)
//< data of aPerson are changeable, not the reference
var aPerson = Person(name:Foo, first:Bar)
//< both reference and data are changeable.
eg:
var aPersonA = Person(name:A, first: a)
var aPersonB = Person(name:B, first: b)
aPersonA = aPersonB
aPersonA now refers to Person(name:B, first: b)
and
let aPersonA = Person(name:A, first: a)
let aPersonB = Person(name:B, first: b)
let aPersonA = aPersonB // won't compile
but
let aPersonA = Person(name:A, first: a)
aPersonA.name = "B" // will compile
let关键字用于声明一个常量,var关键字用于声明一个变量。用这些引用、指针或值创建的变量。
它们之间的区别是,当你使用let创建一个变量时,它将在声明后成为常量,以后不能修改或重新赋值。相反,带有var的变量可以立即赋值,也可以稍后赋值,或者根本不赋值。在swift中,您必须非常明确地声明您所声明的内容。
Let是一个不可变变量,意思是它不能被改变,其他语言称它为常量。在c++中,你可以把它定义为const。
Var是一个可变变量,这意味着它可以被改变。在c++(2011版本更新)中,它与使用auto相同,尽管swift允许更大的灵活性。这是初学者更熟悉的变量类型。