UIView 的子类不调用 didSet
Subclass of UIView doesn't invoke didSet
我有一个名为 BaseView 的 UIView 子类。在 BaseView 的子类中,我用一些代码创建了 didSet。在 UIViewController 中,我初始化了 BaseView 的这个子类,他没有调用他的 didSet
基础视图代码:
class BaseView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
func setupViews() { }
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
BaseView 代码的子类:
class DetailProductView: BaseView {
var product: Product? {
didSet {
productImage.image = UIImage(named: (product?.productImageName)!)
productTitle.text = product?.title
productCompositionLabel.text = product?.description
productPriceLabel.text = "₽" + product!.productPrice!.stringValue
productWeightLabel.text = product!.productWeight!.stringValue + "г."
}
}
UIViewController 代码:
class DetailProductController: UIViewController {
var product: Product?
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let productView = DetailProductView(frame: self.view.bounds)
view.addSubview(productView)
view.layoutSubviews()
}
}
一切正确。您创建了 DetailProductView 的实例,但您从未为其 product
属性 设置任何值。因此 didSet 从未被调用(因为你没有设置任何东西)。
如果你想调用它,你应该为此设置任何值 属性。
我有一个名为 BaseView 的 UIView 子类。在 BaseView 的子类中,我用一些代码创建了 didSet。在 UIViewController 中,我初始化了 BaseView 的这个子类,他没有调用他的 didSet
基础视图代码:
class BaseView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
func setupViews() { }
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
BaseView 代码的子类:
class DetailProductView: BaseView {
var product: Product? {
didSet {
productImage.image = UIImage(named: (product?.productImageName)!)
productTitle.text = product?.title
productCompositionLabel.text = product?.description
productPriceLabel.text = "₽" + product!.productPrice!.stringValue
productWeightLabel.text = product!.productWeight!.stringValue + "г."
}
}
UIViewController 代码:
class DetailProductController: UIViewController {
var product: Product?
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let productView = DetailProductView(frame: self.view.bounds)
view.addSubview(productView)
view.layoutSubviews()
}
}
一切正确。您创建了 DetailProductView 的实例,但您从未为其 product
属性 设置任何值。因此 didSet 从未被调用(因为你没有设置任何东西)。
如果你想调用它,你应该为此设置任何值 属性。