создать все элементы, кроме одного, для применения эффектов - PullRequest
0 голосов
/ 23 декабря 2019

Я бы хотел, чтобы мой быстрый код выполнял своего рода цикл, которому следуют все элементы, кроме одного, указанного пользователем. Так, например, ниже, я перечислил 4 кнопки и 1 objc-функции, связанные с кнопками. В хите b1 я знаю, что могу написать

b1.backgroundcolor = blue and b2.backgroundcolor = green, b3.backgroundcolor = green. Попка, я хотел посмотреть, смогу ли я сделать что-то вроде [b1!,b2,b3].forEach{$0.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{
        $0.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview($0)
        $0.backgroundColor = .blue
    }


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

}

@objc func b1Hit(){

    change all buttons background color to green except b1

}

}

Ответы [ 2 ]

0 голосов
/ 23 декабря 2019

Вариант 1: используйте for in с предложением where

Используйте цикл for in с предложением where, чтобы исключить тот, который вы хотите исключить:

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

Вариант 2: Используйте Set и subtracting

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

или

for button in Set([b1, b2, b3]).subtracting([b1]) {
    button.backgroundColor = .green
}
0 голосов
/ 23 декабря 2019

То, что вы могли бы сделать, это пометить кнопки и использовать условный оператор, чтобы определить, на какие кнопки менять цвета при циклическом переходе:

Например, если у вас был buttonArray, который был [b1, b2, b3]

var buttonArray : [UIButton]!

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

func b1Hit(sender: UIButton) {

   buttonArray.forEach {

     if $0.tag != sender.tag {

       //change color

     }

   }    

}
...