Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用!=在switch语句中?_Ios_Swift_Uibutton_Switch Statement - Fatal编程技术网

Ios 如何使用!=在switch语句中?

Ios 如何使用!=在switch语句中?,ios,swift,uibutton,switch-statement,Ios,Swift,Uibutton,Switch Statement,目前我们有一个有5个按钮的单元格,当按下一个按钮时,它将变为白色,而所有其他按钮将变为黑色。按钮上有一个单独的复选标记imageview,将根据是否选中该按钮进行选中或取消选中。因此,这适用于imageView: @IBAction func changeColor(_ sender: Any) { guard let button = sender as? UIButton else { return } self.s

目前我们有一个有5个按钮的单元格,当按下一个按钮时,它将变为白色,而所有其他按钮将变为黑色。按钮上有一个单独的复选标记imageview,将根据是否选中该按钮进行选中或取消选中。因此,这适用于imageView:

 @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
}
但当尝试使用相同的方法更改按钮图像时:

 button.setImage(UIImage(named: "LR - Nano White - Selected")!, for: .normal) = button.tag != 1
出现以下错误:

无法赋值:函数调用返回不可变值

我试着把它放在一个switch语句中,如下所示:

  switch (button.tag) {

        case != 1: //error occurs here


        default:
           //
        }
但是得到错误:

“!=”不是前缀一元运算符


有没有办法解决这个问题?

一个开关可以代替一个值,将其与一组固定的多个值和其他值进行比较,以选择执行的单个分支。您会遇到这样一种情况,即多个值与多个不同的值进行检查,并执行多个不同的操作作为响应。一个开关并不能真正取代它

相反,我建议使用
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
}
让SelectedCheckMarkImageView=[
选择CheckMarkImageView1,
选择CheckMarkImageView2,
选择CheckMarkImageView3,
选择CheckMarkImageView4,
选择CheckMarkImageView5,
]

让visbleImageViewIndex=button.tag//TODO:这些0中的任意一个数字。一个开关是一个值的替代值,该值与多个固定值集和其他值进行比较,以选择执行的单个分支。您会遇到这样一种情况,即多个值与多个不同的值进行检查,并执行多个不同的操作作为响应。一个开关并不能真正取代它

相反,我建议使用
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
}
让SelectedCheckMarkImageView=[
选择CheckMarkImageView1,
选择CheckMarkImageView2,
选择CheckMarkImageView3,
选择CheckMarkImageView4,
选择CheckMarkImageView5,
]

让visbleImageViewIndex=button.tag//TODO:为这些0进行编号。试试这个

switch (button.tag) {

        case _ where button.tag != 1: 


        default:
           //
        }

试试这个

switch (button.tag) {

        case _ where button.tag != 1: 


        default:
           //
        }


案例应该有一个
Int
,因为标签是
Int
?删除
=
只需检查匹配的情况,例如
情况1:
您应该重新制作
@IBOutlet
,只需选择
ui按钮的参数类型,而不是
任何
。这样,就不需要强制转换(强制或条件转换)。case应该有一个
Int
,因为标记是
Int
?删除
=
只需检查匹配的情况,例如
情况1:
您应该重新制作
@IBOutlet
,只需选择
ui按钮的参数类型,而不是
任何
。这样,就不需要强制施法(强制施法或有条件施法)。我正试图找到一种解释这一点的方法!鼓掌clap@Alexander这对隐藏/取消隐藏ImageView非常有效,但我尝试使用相同的方法将按钮的背景图像更改为“已选定”、“未选定”concept@SwiftyJD所以有什么问题吗?只需在此基础上展开:
让isSelected=visbleImageViewIndex==index;view.ishiden=!当选;view.backgroundImage=isSelected?selectedImage:deselectedImage
@Alexander我想我没有正确解释我要做的事情。我正在尝试使用唯一选定图像数组和唯一未选定图像数组更改按钮(例如button.setImage(unselectedImage,for:.normal))。当点击一个按钮时,它应根据索引在按钮上显示该特定的选定图像,所有其他按钮将自动显示未选定的图像。您提供的代码可以很好地与ImageView配合使用,但这有点不同,因为它的作用类似于:button.setImage(unselectedImage,for:.normal)@SwiftyJD您只需要为每个按钮设置一次图像,每个
UIControl。说明您关心的
。为什么每次按下按钮你都要改变它们?我在想办法解释这一点!鼓掌clap@Alexander这对隐藏/取消隐藏ImageView非常有效,但我尝试使用相同的方法将按钮的背景图像更改为“已选定”、“未选定”concept@SwiftyJD所以有什么问题吗?只需在此基础上展开:
让isSelected=visbleImageViewIndex==index;view.ishiden=!当选;view.backgroundImage=isSelected?selectedImage:deselectedImage
@Alexander我想我没有正确解释我要做的事情。我正在尝试使用唯一选定图像数组和唯一未选定图像数组更改按钮(例如button.setImage(unselectedImage,for:.normal))。当点击一个按钮时,它应根据索引在按钮上显示该特定的选定图像,所有其他按钮将自动显示未选定的图像。您提供的代码可以很好地与ImageView配合使用,但这有点不同,因为它的作用类似于:button.setImage(unselectedImage,for:.normal)@SwiftyJD您只需要为每个按钮设置一次图像,每个
UIControl。说明您关心的
。为什么每次按下按钮都要更改它们?我尝试过,但得到一个错误案例uButton.tag!=1:self.selectedCheckMarkImageView1.isHidden//Expression解析为未使用的l-value@SwiftyJDself.selectedCheckMarkImageView1.isHidden-->isHidden是只读属性,您不使用它,因此error@SwiftyJDswitch case中出现了什么错误?@SwiftyJD您可以分享您的switch语句代码吗?switch button.tag{case{where button.tag!=1:self.selectedCheckMarkImageView1.isHidden case}where button.tag!=2:self.selectedCheckMarkImageView2.isHidden}我尝试过,但得到一个错误案例uButton.tag!=1:self.selectedCheckMarkImageView1.isHidden//Expression解析为未使用的l-value@SwiftyJDself.selectedCheckMarkImageView1.isHidden--