在我的UIView
继承类的required init
中,我正在尝试初始化成员变量,然后使用来自成员变量的数据(即文本(设置视图的子视图。考虑以下伪代码成功加载UI使用变量的数据:
class Event {
var title: String?
}
class A: UIView {
let event: Event! {
didSet {
self.title_label.text = event.title
}
}
required init(event: Event) {
super.init(frame: CGRect(...))
self.setupUI(with: event)
}
func setupUI(with event: Event) {
self.event = event
self.addSubview(title_label)
self.constrainTitleLabel()
}
let title_label: UILabel = {
let label = UILabel()
...
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
...
}
但是,如果我将event
的初始化从函数移动到init
,则UI将不再显示变量的数据:
class A: UIView {
let event: Event! {
didSet {
self.title_label.text = event.title
}
}
required init(event: Event) {
super.init(frame: CGRect(...))
self.event = event
self.setupUI(with: event)
}
func setupUI(with event: Event) {
self.addSubview(title_label)
self.constrainTitleLabel()
}
let title_label: UILabel = {
let label = UILabel()
...
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
...
}
为什么第二种方法无法正确设置title_label.text
?我很确定这足够接近我自己的代码,但是如果此代码实际上没有问题,那么我错过了我所做的事情。谢谢。
didSet
观察者未调用init
设置的值。
在调用超类初始化器之后,当属性设置为子类初始化器中时,将调用超类属性的材料和DIDSET观察者。在称为超类初始化器之前,当一堂课设置自己的属性时,他们没有被调用。
。
(来自属性(。
不幸的是,文档并不完全正确。请参阅Bug SR-1118。从init
设置值时,从未调用观察者。