在苹果的Swift语言中,let和var有什么区别?
在我的理解中,它是一种编译语言,但它不在编译时检查类型。这让我很困惑。编译器如何知道类型错误?如果编译器不检查类型,这不是生产环境的问题吗?
当我试图给let赋值时给出了这个错误:
不能给属性赋值:'variableName'是一个'let'常量 将'let'改为'var'使其可变
在苹果的Swift语言中,let和var有什么区别?
在我的理解中,它是一种编译语言,但它不在编译时检查类型。这让我很困惑。编译器如何知道类型错误?如果编译器不检查类型,这不是生产环境的问题吗?
当我试图给let赋值时给出了这个错误:
不能给属性赋值:'variableName'是一个'let'常量 将'let'改为'var'使其可变
当前回答
Let是一个不可变变量,意思是它不能被改变,其他语言称它为常量。在c++中,你可以把它定义为const。
Var是一个可变变量,这意味着它可以被改变。在c++(2011版本更新)中,它与使用auto相同,尽管swift允许更大的灵活性。这是初学者更熟悉的变量类型。
其他回答
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)定义一个类型,并且任何试图设置变量的代码只能使用该类型(或子类型)。可以在运行时赋值,但在编译时必须知道其类型。
Let用于定义常量,var用于定义变量。
和C语言一样,Swift也使用变量来存储和引用变量的值。Swift还大量使用了值不可更改的变量。这些被称为常量,比c中的常量强大得多。当你处理不需要更改的值时,整个Swift都使用常量,使代码更安全、更清晰。 https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html
Let用于不能修改的常量,而var是普通变量
例子:
let name = " Bob " 像name = " Jim "这样的语句会抛出一个错误,因为常量不能被修改。
来源: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 '常量”。
Var是唯一的方法来创建一个变量在swift。Var并不像javascript这样的解释性语言那样意味着动态变量。例如,
var name = "Bob"
在本例中,变量名称的类型推断为name类型为String,例如,我们也可以通过显式定义type来创建变量
var age:Int = 20
现在如果你将一个字符串赋值给age,编译器就会给出错误。
Let用于声明常量。例如
let city = "Kathmandu"
或者我们也可以,
let city:String = "Kathmandu"
如果您试图更改city的值,则会在编译时给出错误。