Khi bạn override
một initializer như init(frame: CGRect)
, bạn làm điều đó với một initializer định, tức là khởi tạo chủ yếu chịu trách nhiệm cho việc tạo một đối tượng lập trình. Theo quy tắc, bạn phải gọi super.init
trước khi thực hiện bất kỳ hành động init bổ sung nào.
Trình khởi tạo bắt buộc, mặt khác, không giống như được chỉ định.
buộc Initializers
Viết modifier yêu cầu trước khi định nghĩa của một initializer lớp để cho biết rằng mỗi lớp con của lớp phải thực hiện initializer đó.
Bạn cũng phải viết công cụ sửa đổi bắt buộc trước mỗi phân lớp thực hiện trình khởi tạo bắt buộc để cho biết yêu cầu khởi tạo áp dụng cho các lớp con khác trong chuỗi. Bạn không ghi công cụ sửa đổi ghi đè khi ghi đè trình khởi tạo được chỉ định bắt buộc.
Nguồn: Apple Documentation On Initializers
Bạn thực hiện khởi tạo yêu cầu không phụ thuộc ý chí của bạn khi bạn thực hiện một lớp con nếu lớp ban đầu có mà initializer đánh dấu theo yêu cầu. Thông thường, bạn không phải gọi nó trực tiếp để tạo ra một đối tượng, mặc dù trong một số trường hợp bạn làm. Khởi tạo bắt buộc được đánh dấu là bắt buộc để tuân thủ một số yêu cầu. Ví dụ: required init?(coder: NSCoder)
được gọi trong nhiều trường hợp. Một trường hợp: khi khung nhìn được tạo từ IB. Một trường hợp khác - khi một đối tượng được tạo ra, hoặc đúng hơn, được hủy lưu trữ (được gọi là deserialization) theo cách thủ công. Trong thực tế, khi bạn đặt đối tượng đó vào chế độ xem của ViewController (ví dụ), đối tượng đó cũng là hủy lưu trữ, tức là tất cả các thuộc tính của nó được tải và đặt. Rõ ràng, khi bạn tạo một lớp con của một số dạng xem, bạn có nghĩa là để làm cho nó hỗ trợ giao diện này, cung cấp khả năng deserialization (trong trường hợp nó đôi khi được sử dụng từ Interface Builder hoặc là một trong hai)). Đây là lý do tại sao nó là required
.
cách đọc [Tài liệu ngôn ngữ Swift] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18 -XID_335) về khởi tạo? – holex
@holex thế nào về siêu lười biếng – BlueBoy