创建除一个项目之外的所有项目循环以应用效果

create a all but one item loop to apply effects

我希望我的 swift 代码生成一种循环,所有项目都遵循该循环,但用户指定的项目除外。因此,例如下面,我列出了 4 个按钮和 1 个与按钮链接的 objc 函数。在 b1 中,我知道我可以写

b1.backgroundcolor = blue and b2.backgroundcolor = green, b3.backgroundcolor = green。但我想看看我是否可以做类似 [b1!,b2,b3].forEach{[=12=].backgroundcolor = .green.}

的事情
import UIKit

class ViewController: UIViewController {

var b1 = UIButton()
var b2 = UIButton()
var b3 = UIButton()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    [b1,b3,b2].forEach{
        [=10=].translatesAutoresizingMaskIntoConstraints = false
        view.addSubview([=10=])
        [=10=].backgroundColor = .blue
    }


    b1.addTarget(self, action: #selector(b1Hit), for: .touchUpInside)

}

@objc func b1Hit(){

    change all buttons background color to green except b1

}

}

您可以做的是标记按钮并使用条件语句来确定循环时要更改哪些按钮的颜色:

例如,如果您的 buttonArray 是 [b1,b2,b3]

var buttonArray : [UIButton]!

b1.tag = 1
b2.tag = 2
b3.tag = 3

func b1Hit(sender: UIButton) {

   buttonArray.forEach {

     if [=10=].tag != sender.tag {

       //change color

     }

   }    

}

选项 1:将 for inwhere 子句一起使用

使用带有 where 子句的 for in 循环来排除您要排除的那个:

// change all buttons background color to green except b1
for button in [b1, b2, b3] where button != b1 {
    button.backgroundColor = .green
}

选项 2:使用 Setsubtracting

Set([b1, b2, b3]).subtracting([b1]).forEach {
    [=11=].backgroundColor = .green
}

for button in Set([b1, b2, b3]).subtracting([b1]) {
    button.backgroundColor = .green
}