[英]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()
來更新您的布局。 例如didSet
的cardModel
可以是這樣的:
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.