2014-09-13 26 views
7

Trong Swift, chúng tôi biểu thị biến không thay đổi với let.Tại sao các thuộc tính của một đối tượng bất biến có thể thay đổi trong Swift?

Điều tôi không hiểu là lý do bạn thay đổi thuộc tính của họ. Ví dụ:

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

Tại sao bạn có thể thay đổi textAlignment? Bởi vì đột biến tài sản, chúng ta đã không biến đổi biến số lbl được cho là không đổi?

+0

Không thể gán lại * biến/ràng buộc * cho một giá trị khác; điều này một mình không nói gì về sự biến đổi của đối tượng mà kết quả từ việc đánh giá biến. Điều này giống như các biến/trường cuối cùng của 'readonly' trong Java và C#. – user2864740

Trả lời

14

Theo Swift Programming Language, các thuộc tính của hằng số cấu trúc cũng là hằng số, nhưng liên tục lớp có thể có các thuộc tính có thể thay đổi.

Trong lời nói của họ,

Nếu bạn tạo một thể hiện của một cấu trúc và gán dụ đó để một hằng số, bạn không thể sửa đổi thuộc tính của ví dụ, ngay cả khi họ đã được tuyên bố là thuộc tính biến ...

Điều tương tự cũng không đúng đối với các lớp, là các kiểu tham chiếu. Nếu bạn chỉ định một thể hiện của một loại tham chiếu cho một hằng số, bạn vẫn có thể thay đổi các thuộc tính biến của cá thể đó.

+0

Cảm ơn, giải thích nó một cách hoàn hảo. Sẽ chấp nhận khi tôi có thể. –

3

Loại lớp là loại tham chiếu - giá trị là con trỏ đến đối tượng. Không thể thay đổi nó đơn giản có nghĩa là không thay đổi tham chiếu, để trỏ đến một đối tượng khác. Nó không liên quan gì đến những gì bạn có thể làm với đối tượng đang được chỉ ra.

Các vấn đề liên quan