簡體   English   中英

使用模型對象 didSet 設置布爾值

[英]Set a bool value using model object didSet

我正在努力弄清楚如何使用模型對象的 didSet 正確設置 bool 值。 我的應用程序有一系列可滑動的卡片,有些可以翻轉,有些則不能。 下面的代碼是為每張創建的卡片運行的 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。

為了更好的可讀性,你可以稍微更新你的代碼,用var isBackShowing = false替換var isBackShowing = Bool()

您也可以在設置 cardModel 后調用setupLayout()來更新您的布局。 例如didSetcardModel可以是這樣的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM