What is the difference between `let` and `var` in swift?

后端 未结 30 1045
隐瞒了意图╮
隐瞒了意图╮ 2020-11-22 11:09

What is the difference between let and var in Apple\'s Swift language?

In my understanding, it is a compiled language but it does not check

相关标签:
30条回答
  • 2020-11-22 11:36

    Everyone has pretty much answered this but here's a way you can remember what's what

    Let will always say the same think of "let" as let this work for once and always as for "var" variable's can always change hence them being called variable's

    0 讨论(0)
  • 2020-11-22 11:37

    It's maybe better to state this difference by the Mutability / Immutability notion that is the correct paradigm of values and instances changeability in Objects space which is larger than the only "constant / variable" usual notions. And furthermore this is closer to Objective C approach.

    2 data types: value type and reference type.

    In the context of Value Types:

    'let' defines a constant value (immutable). 'var' defines a changeable value (mutable).

    let aInt = 1   //< aInt is not changeable
    
    var aInt = 1   //< aInt can be changed
    

    In the context of Reference Types:

    The label of a data is not the value but the reference to a value.

    if aPerson = Person(name:Foo, first:Bar)

    aPerson doesn't contain the Data of this person but the reference to the data of this 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
    
    0 讨论(0)
  • 2020-11-22 11:37

    let defines a "constant". Its value is set once and only once, though not necessarily when you declare it. For example, you use let to define a property in a class that must be set during initialization:

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

    With this setup, it's invalid to assign to firstName or lastName after calling (e.g.) Person(first:"Malcolm", last:"Reynolds") to create a Person instance.

    You must define a type for all variables (let or var) at compile time, and any code that attempts to set a variable may only use that type (or a subtype). You can assign a value at run time, but its type must be known at compile time.

    0 讨论(0)
  • 2020-11-22 11:37

    let is a constant value, so it can never be changed.

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

    Var is a variable, and can change (but after it is defined not to a different data type.)

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

    If you try changing the variable to a different dataType, it will not work

    var number = 5
    number = "Hello World"   //This will not compile.
    
    0 讨论(0)
  • 2020-11-22 11:39

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

    When you declare a variable with var, it means it can be updated, it is variable, it’s value can be modified.

    When you declare a variable with let, it means it cannot be updated, it is non variable, it’s value cannot be modified.

    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"
    

    Let us understand above example: We have created a new variable “a” with “var keyword” and assigned the value “1”. When I print “a” I get output as 1. Then I assign 2 to “var a” i.e I’m modifying value of variable “a”. I can do it without getting compiler error because I declared it as var.

    In the second scenario I created a new variable “b” with “let keyword” and assigned the value “4”. When I print “b” I got 4 as output. Then I try to assign 5 to “let b” i.e. I’m trying to modify the “let” variable and I get compile time error “Cannot assign to value: ‘b’ is a ‘let’ constant”.

    0 讨论(0)
  • 2020-11-22 11:40

    Like Luc-Oliver, NullData, and a few others have said here, let defines immutable data while var defines mutable data. Any func that can be called on the variable that is marked mutating can only be called if it is a var variable (compiler will throw error). This also applies to func's that take in an inout variable.

    However, let and var also mean that the variable cannot be reassigned. It has two meanings, both with very similar purposes

    0 讨论(0)
提交回复
热议问题