使用模型对象didSet

时间:2019-03-20 15:45:46

标签: swift didset

我正在努力找出如何使用模型对象的didSet正确设置布尔值的方法。我的应用程序有一系列可刷卡,有些卡可翻转,有些则不。下面的代码是为创建的每个卡运行的CardView。

当前,该代码非常适合图像和标签-每个卡都基于每个卡的模型对象加载唯一信息。但是,按钮和isFlippable属性是我苦苦挣扎的地方。

现在的代码始终在加载绿色通道。但是,很奇怪的是,即使cardModel应该将按钮isEnabled设置为false,它仍然会加载绿色(但是该按钮将不起作用,因此它确实被禁用了……)

var cardModel: CardModel! {
   didSet {
      imageView.image = cardModel.image
      label.text = cardModel.label
      flipButton.isEnabled = cardModel.isFlippable
      isBackShowing = cardModel.isFlippable //Intentionally use isFlippable here because I want the initial layout to be based on this true or false value.
   }
}


let imageView = UIImageView()
let label = UILabel()
let flipButton = UIButton()
var isBackShowing = false

override init(frame: CGRect) {
    super.init(frame: frame)
    setupLayout()
}

fileprivate func setupLayout() {

    if flipButton.isEnabled == true {
        if isBackShowing == true {
            backgroundColor = .red
        } else {
            backgroundColor = .green
        }
    } else {
        backgroundColor = .yellow
    }
}

我也有代码,当按钮翻转时交替显示“ isBackShowing”,然后调用setupLayout()-它工作正常。但是在卡的初始设置过程中,它始终加载为false。

1 个答案:

答案 0 :(得分:1)

为了获得更好的可读性,您可以一点点更新代码,将var isBackShowing = Bool()替换为var isBackShowing = false

在设置cardModel之后,您也可以调用setupLayout()来更新布局。例如,didSet中的cardModel可能看起来像这样:

var cardModel: CardModel! {
   didSet {
      imageView.image = cardModel.image
      label.text = cardModel.label
      flipButton.isEnabled = cardModel.isFlippable
      isBackShowing = cardModel.isFlippable
      setupLayout()
   }
}