[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
있습니다 참조 따라서 let
A는 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
또는 할당이 잘못되었습니다 .lastName
Person(first:"Malcolm", last:"Reynolds")
Person
당신은 있어야 모든 변수 (에 대한 유형 정의 let
또는 var
컴파일시에), 그리고 변수를 설정하려는 시도는 그 유형 (또는 하위 유형)을 사용할 수 있음에 코드를. 런타임시 값 을 지정할 수 있지만 컴파일시 해당 유형을 알아야합니다.