【问题标题】:Swift : How to perform actions only if an array matches specific conditions?Swift:仅当数组匹配特定条件时如何执行操作?
【发布时间】:2025-12-30 19:50:11
【问题描述】:

所以我遇到了这个问题(Swift 初学者,所以你知道),在这里找不到解决方案:

我有一组按钮,我将它们关联到 boolsarray,我们将其命名为 litPad

基本上例如,如果button[i] 被突出显示,litPad[i] 将变为true(默认情况下,我将整个bool array 设置为false)。

我想要实现的是仅当某些 boolstrue 时才执行某些操作:

例如,如果 litPad[3]litPad[6]litPad[12]true,我将执行一个操作,但这些条件必须是独占的,这意味着如果这 3 个按钮被突出显示,但任何其他按钮也被突出显示一个动作不会执行,另一个会执行(不同的动作,例如,如果只突出显示litPad[3]litPad[6]/true 或者如果突出显示litPad[3]litPad[6]litPad[12]litPad[19]/@ 987654343@).

我似乎无法正确格式化我的 if 语句以匹配我想要实现的目标。

提前致谢!!

【问题讨论】:

  • 列出条件为真的索引号。现在直接比较该列表。如果是[3 ,6,12],则执行该操作,依此类推。
  • 您好,还请附上您目前所拥有的代码 sn-p,这样我们可以更轻松地提供帮助! :)
  • 谢谢大家!是的,我想知道是否包含代码 sn-p,但我认为它是如此基本,以至于根据我的描述它是不必要的;马特的回答最终解决了我的问题:)

标签: arrays swift xcode


【解决方案1】:

您可以使用Set 来跟踪哪些按钮“打开”,然后为各个操作构建switch 语句:

var litPad = Set<Int>()

litPad = [ 1,2,5 ]

switch litPad {
case [1,2,5]: print("action 1")
case [1,2]: print("action 2")
default: ()
}

【讨论】:

  • 感谢 Gereon !这部分解决了我的问题,将这个集合映射到 bool 数组,但 Matt 的回答解决了它。但我会更深入地研究 Set,因为它们似乎很有用!
【解决方案2】:

你有一系列基于非常具体的“哪些是真的”模式的动作,所以只需匹配这些模式:

switch whichAreTrue {
    case [3,6,12]: doOneThing()
    case [3,6]: doAnotherThing()
    // ...
    default:break
}

我想问题是:给定一个布尔数组,如何你知道“哪些是真的”?您如何从事物本身得出索引号?像这样:

let arr = [true, false, true, false, false, true, false]
let whichAreTrue = arr.enumerated().filter{$0.1}.map{$0.0} // [0, 2, 5]

现在你有了可以匹配的东西。

【讨论】:

  • 非常感谢!!这正是我一直在寻找的,而且效果很好,谢谢 :) 我还没有习惯 switch 语句,非常习惯于我之前使用过的其他编程语言的 ifs,我从来没有想过使用 swtiches,很高兴我遇到了需要它们的问题,并向我展示了它们的有用性。
最近更新 更多