[swift] 신속하게 ‘let’과 ‘var’의 차이점은 무엇입니까?

Apple의 Swift 언어 let와 의 차이점은 무엇입니까 var?

내 이해로는 컴파일 된 언어이지만 컴파일 타임에 유형을 확인하지 않습니다. 혼란 스러워요. 컴파일러는 형식 오류에 대해 어떻게 알 수 있습니까? 컴파일러가 유형을 확인하지 않으면 프로덕션 환경에 문제가 있습니까?



답변

let키워드는 상수를 정의합니다 :

let theAnswer = 42

theAnswer나중에 변경할 수 없습니다. 을 weak사용하여 어떤 것도 쓸 수없는 이유 let입니다. 그들은 필요가 변경 런타임 동안 당신은 사용해야합니다 var대신.

var일반 변수를 정의합니다.

흥미로운 점 :

상수 값은 컴파일 타임에 알 필요는 없지만 값을 정확히 한 번 할당해야합니다.

또 다른 이상한 특징 :

유니 코드 문자를 포함하여 상수 및 변수 이름에 원하는 거의 모든 문자를 사용할 수 있습니다.

let 🐶🐮 = "dogcow"

발췌 : Apple Inc.“Swift Programming Language.” iBooks. https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewBook?id=881256329

편집하다

주석이 답변에 다른 사실을 추가하도록 요구하므로 커뮤니티 위키 답변으로 변환하십시오 . 답변을 자유롭게 편집하여 개선하십시오.


답변

Swift Programming Language Book 에 따르면

C와 마찬가지로 Swift는 변수를 사용 하여 식별 이름으로 값 을 저장하고 참조 합니다. Swift는 또한 값을 변경할 수없는 변수를 광범위하게 사용합니다. 이것들은 상수로 알려져 있으며 C의 상수보다 훨씬 강력합니다.

둘 다 var하고 let있습니다 참조 따라서 letA는 const를 참조 . 기본 유형을 사용한다고해서 어떻게 다른지 알 수 let는 없습니다 const. 클래스 인스턴스 (참조 유형)와 함께 사용할 때 차이점이 있습니다.

class CTest
{
    var str : String = ""
}

let letTest = CTest()
letTest.str = "test" // OK

letTest.str = "another test" // Still OK

//letTest = CTest() // Error

var varTest1 = CTest()
var varTest2 = CTest()
var varTest3 = CTest()

varTest1.str = "var 1"
varTest2.str = "var 2"
varTest3 = varTest1
varTest1.str = "var 3"

varTest3.str // "var 3"


답변

let상수 var를 정의하고 변수를 정의 하는 데 사용됩니다 .


답변

객체 공간에서 유일한 “일정한 / 가변적 인”일반적인 개념보다 더 큰 값과 인스턴스의 변경 가능한 패러다임 인 Mutability / Unmutability 개념으로 이러한 차이를 설명하는 것이 좋습니다. 또한 이것은 Objective C 접근 방식에 더 가깝습니다.

두 가지 데이터 유형 : 값 유형 및 참조 유형.

값 유형의 맥락에서 :

‘let’은 상수 값을 정의합니다 (최대 값). ‘var’은 변경 가능한 값 (변경 가능)을 정의합니다.

let aInt = 1   //< aInt is not changeable

var aInt = 1   //< aInt can be changed

참조 유형의 맥락에서 :

데이터의 레이블은 값이 아니라 값에 대한 참조입니다.

aPerson = Person (name : Foo, first : Bar) 인 경우

aPerson은이 개인의 데이터를 포함하지 않지만이 개인의 데이터에 대한 참조를 포함합니다.

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)


답변

그만큼

Swift Programming Language 문서의 상수 및 변수 선언 섹션은 다음을 지정합니다.

let 키워드를 사용하여 상수를 선언하고 var 키워드를 사용하여 변수를 선언합니다.

이것이 참조 유형에서 작동하는 방식을 이해해야합니다. 값 형식과 달리 개체의 기본 속성은 상수로 선언 된 참조 형식의 인스턴스에도 불구하고 변경 될 수 있습니다. 설명서클래스는 참조 유형 섹션을 참조 하고 frameRate 특성을 변경하는 예제를보십시오.


답변

매우 간단합니다 :

  • let 일정합니다.
  • var 동적입니다.

설명 비트 :

let상수를 만듭니다. (과 같은 종류 NSString). 일단 설정 한 후에는 값을 변경할 수 없습니다. 그래도 다른 것에 추가하고 새 변수를 만들 수 있습니다.

var변수를 만듭니다. (와 같은 정렬 NSMutableString) 값을 변경할 수 있습니다. 그러나 이것은 여러 번 대답되었습니다.


답변

let“일정한”을 정의합니다. 값을 선언 할 때 반드시 그런 것은 아니지만 값은 한 번만 설정됩니다. 예를 들어 let초기화 중에 설정해야하는 클래스의 속성을 정의하는 데 사용 합니다.

class Person {

    let firstName: String
    let lastName: String

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

이 설정에서는 인스턴스 를 생성하기 위해 호출 (예 : 호출) 후 firstName또는 할당이 잘못되었습니다 .lastNamePerson(first:"Malcolm", last:"Reynolds")Person

당신은 있어야 모든 변수 (에 대한 유형 정의 let또는 var컴파일시에), 그리고 변수를 설정하려는 시도는 그 유형 (또는 하위 유형)을 사용할 수 있음에 코드를. 런타임시 을 지정할 수 있지만 컴파일시 해당 유형을 알아야합니다.