Câu hỏi
Tài liệu của Apple chỉ định rằng:
Các quan sát viên will set và did set không được gọi khi một thuộc tính được khởi tạo lần đầu tiên. Chúng chỉ được gọi khi giá trị của thuộc tính được đặt bên ngoài bối cảnh khởi tạo.
Có thể buộc những thứ này được gọi trong quá trình khởi tạo không?
Tại sao?
Hãy nói tôi có lớp học này
class SomeClass {
var someProperty: AnyObject {
didSet {
doStuff()
}
}
init(someProperty: AnyObject) {
self.someProperty = someProperty
doStuff()
}
func doStuff() {
// do stuff now that someProperty is set
}
}
Tôi đã tạo phương thức doStuff
, để làm cho các cuộc gọi xử lý ngắn gọn hơn, nhưng tôi chỉ muốn xử lý thuộc tính trong didSet
hàm. Có cách nào để buộc điều này để gọi trong quá trình khởi tạo không?
Cập nhật
Tôi quyết định chỉ gỡ bỏ intializer cho lớp của tôi và buộc bạn đặt thuộc tính sau khi khởi tạo. Điều này cho phép tôi biết didSet
sẽ luôn luôn được gọi. Tôi đã không quyết định nếu điều này là tốt hơn về tổng thể, nhưng nó phù hợp với hoàn cảnh của tôi.
defer
:convenience init(someProperty: AnyObject) { self.init() defer { self.someProperty = someProperty }