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

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

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

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


当前回答

Let用于定义常量,var用于定义变量。 你使用var定义字符串,那么特定的string可以通过赋值给一个变量(在这种情况下它可以被修改)来修改(或突变),如果你使用let它是一个常量(在这种情况下它不能被修改):

var variableString = "Apple"
variableString += " and Banana"
// variableString is now "Apple and Banana"

let constantString = "Apple"
constantString += " and another Banana"
// this reports a compile-time error - a constant string cannot be modified

其他回答

Let用于声明一个常量值-在给出初始值后,您将不会更改它。 Var用于声明一个变量值—您可以根据需要更改它的值。

Let用于不能修改的常量,而var是普通变量

例子:

let name = " Bob " 像name = " Jim "这样的语句会抛出一个错误,因为常量不能被修改。

在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.

用let关键字声明常量,用var关键字声明变量。

let maximumNumberOfLoginAttempts = 10 var currentLoginAttempt = 0   
let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0

在一行中声明多个常量或多个变量,用逗号分隔:

var x = 0.0, y = 0.0, z = 0.0

打印常量和变量

你可以用println函数输出常量或变量的当前值:

println(friendlyWelcome)

Swift使用字符串插值将常量或变量的名称作为占位符包含在更长的字符串中

将名称用括号括起来,并在开括号前用反斜杠转义:

println("The current value of friendlyWelcome is \(friendlyWelcome)")

参考资料:http://iosswift.com.au/?p=17

来源:https://thenucleargeeks.com/2019/04/10/swift-let-vs-var/

当你用var声明一个变量时,这意味着它可以被更新,它是一个变量,它的值可以被修改。

当你用let声明一个变量时,这意味着它不能被更新,它是非变量,它的值不能被修改。

var a = 1 
print (a) // output 1
a = 2
print (a) // output 2

let b = 4
print (b) // output 4
b = 5 // error "Cannot assign to value: 'b' is a 'let' constant"

让我们理解上面的例子:我们已经创建了一个新变量“a”,带有“var关键字”,并赋值为“1”。当我输出“a”时,输出结果为1。然后我给“var a”赋值2,即我正在修改变量“a”的值。这样做不会引起编译器错误,因为我声明为var。

在第二个场景中,我用“let关键字”创建了一个新变量“b”,并赋值为“4”。当我输出b时,我得到4作为输出。然后我尝试将5分配给“let b”,即我试图修改“let”变量,我得到编译时错误“不能分配给值:' b '是一个' let '常量”。