Arrays 计算swift数组中选定按钮的数量

Arrays 计算swift数组中选定按钮的数量,arrays,swift,button,toggle,selected,Arrays,Swift,Button,Toggle,Selected,我有4个定制的切换按钮。用户可以选择多个按钮并切换同一按钮,但必须始终至少有一个选定按钮 如果选择了4个按钮中的1个,则无法将所选按钮切换为取消选择 我正在寻找一种方法来确定这种逻辑。我的想法是简单地计算按钮数组中的选定项,如果只有1个选定项,则通过return进行转义 这是我的进步 func toggleButton(button: ToggleButton){ let buttonArray = [btn1, btn2, btn3, btn4] for btn in

我有4个定制的切换按钮。用户可以选择多个按钮并切换同一按钮,但必须始终至少有一个选定按钮

如果选择了4个按钮中的1个,则无法将所选按钮切换为取消选择

我正在寻找一种方法来确定这种逻辑。我的想法是简单地计算按钮数组中的选定项,如果只有1个选定项,则通过return进行转义

这是我的进步

func toggleButton(button: ToggleButton){
    
    let buttonArray = [btn1, btn2, btn3, btn4]
    for btn in buttonArray{
        // Count the amount of selected buttons in buttonArray
        // if 1, return.
    }
    
    button.isSelected = !button.isSelected
}

有没有办法计算ButtonRay中所选按钮的数量?

也许可以使用变量
numberOfSelected
来跟踪所选按钮的数量?如果它等于1,则返回:

var numberOfSelected = 0
let buttonArray = [btn1, btn2, btn3, btn4]
for btn in buttonArray {
    if btn.isSelected {
        numberOfSelected += 1
    }
}
if numberOfSelected == 1 { return } /// escape via return
在我的操场上:

struct ToggleButton {
    let isSelected: Bool
}
let btn1 = ToggleButton(isSelected: true)
let btn2 = ToggleButton(isSelected: false)
let btn3 = ToggleButton(isSelected: false)
let btn4 = ToggleButton(isSelected: true)
let buttonArray = [btn1, btn2, btn3, btn4]
我可以做到:

let count = buttonArray // 2
    .filter(\.isSelected)
    .map { _ in 1 }
    .reduce(0, +)
或:

但如果您真正想知道的是,是否至少选择了一个按钮,您可以直接执行以下操作:

let atLeastOneButtonSelected = !buttonArray
    .map(\.isSelected)
    .filter { $0 }
    .isEmpty
let atLeastOneButtonSelected = !buttonArray
    .map(\.isSelected)
    .filter { $0 }
    .isEmpty