使用模型对象 didSet 设置 bool 值
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 = Bool()
替换为 var isBackShowing = false
。
您也可以在设置 cardModel 后调用 setupLayout()
来更新您的布局。例如 cardModel
的 didSet
可以是这样的:
var cardModel: CardModel! {
didSet {
imageView.image = cardModel.image
label.text = cardModel.label
flipButton.isEnabled = cardModel.isFlippable
isBackShowing = cardModel.isFlippable
setupLayout()
}
}
我正在努力弄清楚如何使用模型对象的 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 = Bool()
替换为 var isBackShowing = false
。
您也可以在设置 cardModel 后调用 setupLayout()
来更新您的布局。例如 cardModel
的 didSet
可以是这样的:
var cardModel: CardModel! {
didSet {
imageView.image = cardModel.image
label.text = cardModel.label
flipButton.isEnabled = cardModel.isFlippable
isBackShowing = cardModel.isFlippable
setupLayout()
}
}