代码之家  ›  专栏  ›  技术社区  ›  SwiftyJD

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

  •  0
  • SwiftyJD  · 技术社区  · 7 年前

    目前我们有一个有5个按钮的单元格,当按下一个按钮时,它将变为白色,而所有其他按钮将变为黑色。该按钮上有一个单独的复选标记图像视图,根据是否选中该按钮,该视图将被选中或取消选中。所以这对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:
               //
            }
    

    '!=' 不是前缀一元运算符

    你知道怎么解决这个问题吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Alexander    7 年前

    开关是将1个值与一组固定的多个值(其他值)进行比较的值的替换,以选择执行的单个分支。在这种情况下,将多个值与多个不同的值进行检查,并执行多个不同的响应操作。一个开关并不能真正取代它。

    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
    }
    
        2
  •  1
  •   Vinay Kiran    7 年前

    试试这个

    switch (button.tag) {
    
            case _ where button.tag != 1: 
    
    
            default:
               //
            }