在苹果的Swift语言中,let和var有什么区别?

在我的理解中,它是一种编译语言,但它不在编译时检查类型。这让我很困惑。编译器如何知道类型错误?如果编译器不检查类型,这不是生产环境的问题吗?

当我试图给let赋值时给出了这个错误:

不能给属性赋值:'variableName'是一个'let'常量 将'let'改为'var'使其可变


当前回答

Let定义一个“常数”。它的值设置一次且仅一次,但不一定在声明时设置。例如,你可以使用let来定义类中必须在初始化时设置的属性:

class Person {

    let firstName: String
    let lastName: String

    init(first: String, last: String) {
         firstName = first
         lastName = last
         super.init()
    }
}

通过这种设置,在调用(例如)Person(第一个:“Malcolm”,最后一个:“Reynolds”)创建Person实例后赋值给firstName或lastName是无效的。

您必须在编译时为所有变量(let或var)定义一个类型,并且任何试图设置变量的代码只能使用该类型(或子类型)。可以在运行时赋值,但在编译时必须知道其类型。

其他回答

每个人都回答了这个问题,但有一种方法可以让你记住什么是什么

“让”总是说同样的想法“让”让这个工作一次和永远至于“var”变量总是可以改变,因此它们被称为变量

用可变性/不可变性概念来陈述这种差异可能更好,这是对象空间中值和实例可变性的正确范式,比唯一的“常量/变量”通常概念更大。 而且这更接近于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

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

Let是一个常量,所以它永远不能改变。

let number = 5  
number = 6               //This will not compile.

Var是一个变量,可以更改(但在定义为不同的数据类型之后)。

var number = 5
number = 6               //This will compile.

如果您尝试将变量更改为不同的数据类型,它将不起作用

var number = 5
number = "Hello World"   //This will not compile.

在swift语言中,let是一个常量,意思是不能重新分配,但var可以重新分配

let question = "what is the difference between let and var?"

question = "another question" // this line cause syntax error

var answer = "let is constant and var is simple variable"

answer = "let can't be reassigned var can be reassigned" // this line will be excecuted