Swift: Как выполнять действия, только если массив соответствует указанным c условиям? - PullRequest
0 голосов
/ 22 марта 2020

Итак, я столкнулся с этой проблемой (новичок в Swift, как вы знаете) и не смог найти решение здесь:

У меня есть массив кнопок, которые я связываю с array из bools, назовем его litPad.

В основном, например, если выделено button[i], litPad[i] становится true (по умолчанию я устанавливаю whol bool array на false).

То, чего я хочу достичь, - это выполнять определенные действия, только если некоторые bools являются true:

Например, если litPad[3], litPad[6] & litPad[12] true Я выполню действие, но эти условия должны быть исключительными, то есть, если эти 3 кнопки выделены, но любая другая, а также действие не будет выполнено, другая будет (например, другие действия, если только * 1024). * & litPad[6] выделены / true или если выделены litPad[3], litPad[6], litPad[12] & litPad[19] / true).

Не получается правильно отформатировать мои заявления if, чтобы соответствовать тому, чего я хочу достичь.

Заранее спасибо !!

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

Вы можете использовать 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: ()
}

1 голос
/ 22 марта 2020

У вас есть ряд действий, основанных на очень специфических c шаблонах «какие из них истинны», поэтому просто сопоставьте эти шаблоны:

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

Я полагаю, что вопрос заключается в следующем: массив Bools, как вы знаете, "которые являются правдой"? Как вы получаете индексные числа от самой вещи? Вот так:

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

И теперь у вас есть что-то, с чем вы можете сравниться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...