当前我们有一个包含5个按钮的单元格,当按下一个按钮时,它将变为白色,而所有其他按钮将变为黑色。按钮上有一个单独的选中标记图像视图,该视图将被选中还是不选中,这取决于是否选择了按钮。太胖了,适用于imageView:
undefined
但是当尝试使用相同的方法来更改按钮图像时:
@IBAction func changeColor(_ sender: Any) {
guard let button = sender as? UIButton else {
return
}
self.selectedCheckMarkImageView1.isHidden = button.tag != 1
self.selectedCheckMarkImageView2.isHidden = button.tag != 2
self.selectedCheckMarkImageView3.isHidden = button.tag != 3
self.selectedCheckMarkImageView4.isHidden = button.tag != 4
self.selectedCheckMarkImageView5.isHidden = button.tag != 5
}
发生错误:
无法分配值:函数调用返回不可变的值
我尝试将其放在这样的switch语句中:
button.setImage(UIImage(named: "LR - Nano White - Selected")!, for: .normal) = button.tag != 1
但出现错误:
'!='不是前缀一元运算符
关于如何解决此问题的任何想法?
答案 0 :(得分:2)
一个开关是一个值的替代,该值与多个值的其他值的固定集进行比较,以选择要执行的单个分支。在这种情况下,您需要针对多个不同的值检查多个值,并做出多种不同的响应。单个开关并不能真正取代它。
相反,我建议使用for
循环来减少重复。
let selectedCheckMarkImageViews = [
selectedCheckMarkImageView1,
selectedCheckMarkImageView2,
selectedCheckMarkImageView3,
selectedCheckMarkImageView4,
selectedCheckMarkImageView5,
]
let visbleImageViewIndex = button.tag // TODO: either number these 0..<4, or add 1 below
for (index, view) in selectedCheckMarkImageViews.enumerated() {
view.isHidden = visbleImageViewIndex != index
}
答案 1 :(得分:1)
尝试
switch (button.tag) {
case _ where button.tag != 1:
default:
//
}