2014-09-13 4 views
7

Swift에서 불변 변수를 let으로 표시합니다.왜 Swutable에서 변경할 수없는 객체의 속성을 변경할 수 있습니까?

내가 이해하지 못하는 이유는 속성을 변경 한 이유입니다. 예 :

let lbl = UILabel() 
lbl.textAlignment = .Right() 

textAlignment을 변경할 수 있습니까? 재산을 돌연변이시킨 덕분에 우리는 변하지 않은 변수 lbl을 돌연변이 시켰습니까?

+0

* 변수/바인딩 *을 다른 값으로 다시 할당 할 수 없습니다. 이것만으로도 변수의 평가 결과로 생기는 객체의 가변성에 대해서는 아무 것도 말하지 않습니다. 이는 Java 및 C#의'final/readonly' 변수/필드와 동일합니다. – user2864740

답변

14

Swift Programming Language에 따르면, 일정한 구조체의 특성은 일정하지만, 일정한 클래스 가변 특성을 가질 수있다. 당신이 구조의 인스턴스를 생성하고 일정에 해당 인스턴스를 할당하면 그들의 말에

,

것은, 당신은 ...

그들이 변수 속성으로 선언 된 경우에도 인스턴스의 속성을 수정할 수 없습니다

참조 유형 인 클래스에 대해서는 동일하지 않습니다. 참조 유형의 인스턴스를 상수에 할당하는 경우에도 해당 인스턴스의 변수 속성을 변경할 수 있습니다.

+0

감사합니다. 완벽하게 설명합니다. 할 수있을 때 받아 들일 것입니다. –

3

클래스 유형은 참조 유형입니다. 값은 객체에 대한 포인터입니다. 변경할 수 없다는 것은 다른 객체를 가리 키기 위해 참조를 변경하지 않는다는 것을 의미합니다. 그것은 당신이 가리키고있는 대상으로 할 수있는 것과 아무 상관이 없습니다.

관련 문제