Khởi tạo và kế thừa một Class
Nhiệm vụ của một bộ khởi tạo Class là bản thiết kế. Object là một đối tượng, và là một thể hiện của 1 class. Khởi tạo là quá trình chuẩn bị trước khi sử dụng của một thể hiện của một class, struct, hoặc enum. Để triển khai một quá trình khởi tạo, người ta phải định nghĩa các bộ khởi ...
Nhiệm vụ của một bộ khởi tạo
Class là bản thiết kế.
Object là một đối tượng, và là một thể hiện của 1 class.
Khởi tạo là quá trình chuẩn bị trước khi sử dụng của một thể hiện của một class, struct, hoặc enum. Để triển khai một quá trình khởi tạo, người ta phải định nghĩa các bộ khởi tạo. Trong quá trình khởi tạo, tất cả các stored property của một class (bao gồm cả những stored property của nó và nó được kế thừa) phải được gán một giá trị đầu tiên (giá trị khởi tạo).
Để minh hoạ cho điều này chúng ta xem xét một ví dụ: một máy tính bắt buộc phải có ram, chip, main, HDD. Nó cũng có thể có thêm chuột máy tính đi theo máy (mouse)
Một máy tính suất xưởng, nó phải được ráp main, chip, ram, và hdd xác định. Một máy tính không thể có một cái main nào đó được! Nhưng nó cũng có thể có một con chuột theo máy hoặc không. Quá trình khởi tạo giống như quá trình lắp ráp một chiếc máy, nó đảm bảo chắc chắn việc những thành phần phải có của class được khởi tạo và không rơi vào tình trạng bất định.
Swift có hai loại bộ khởi tạo cho class là bộ khởi tạo theo thiết kế (designated initializers), và bộ khởi tạo tiện lợi (convenience initializers)
Designated Initializers VS Convenience Initializers
Như tên gọi của các bộ khởi tạo, bộ khởi tạo thiết kế là bộ khởi tạo chính, bộ khởi tạo cơ bản.
Nhưng trong một số trường hợp, để tạo sự thuận lợi cho việc khởi tạo, chúng ta truyền vào những tham số mặc định cho bộ khởi tạo cơ bản.
Quay lại ví dụ.
Máy tính DellVostro cũng là một loại máy tính, nó kế thừa thiết kế của máy tính. Vì vậy nó cũng có ram, chip, main, hdd, và mouse. Và nó cũng có một bộ khởi tạo được kế thừa lại từ lớp Computer.
Dell Vostro là dòng máy tính có cấu hình gần giống nhau. Vì vậy để thuận tiện cho việc khởi tạo, ta tạo ra một hàm convenience init() với những giá trị mặc định được khởi tạo sẵn.
Thay vì việc phải truyền từng ram, chip, main, hdd vào thì ta chỉ việc gọi init() để tạo ra những máy tính Dell Vostro với cấu hình cơ bản.
Hai giai đoạn khởi tạo
Giai đoạn 1: Gán các giá trị khởi tạo cho các stored property. Giai đoạn này xảy ra trước khi uỷ quyền khởi tạo cho bộ khởi tạo của superClass.
** Giai đoạn 2