Пропущенный код в if - тогда поток управления запускается после оповещения - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть экран с несколькими переключателями, чтобы пользователь мог выбрать элемент. Я хочу ограничить выбор пользователем только одного элемента.

Я объявляю эту переменную в начале класса перед функцией viewDidLoad:

var instrumentCounter:Int = 0

Я объявляю переменные выхода для каждого переключателя :

@IBOutlet weak var guitarPlay: UISwitch!

У меня также есть функция для каждого переключателя (примечание - у меня есть несколько операторов печати для устранения неполадок):

@IBAction func guitarSwitch(_ sender: Any) {
    if self.guitarPlay.isOn == false
    {
    print("Top: \(instrumentCounter)")
    instrumentCounter -= 1
    print("Top: \(instrumentCounter)")
    }
    else if self.guitarPlay.isOn && instrumentCounter == 1
        {
            self.guitarPlay.setOn(false, animated: true)
            showTooManyAlert()
            print("Middle: \(instrumentCounter)")
        }
            else{
                instrumentCounter += 1
                print(instrumentCounter)
            }
}

Вот функция для предупреждения:

func showTooManyAlert(){
    let alertController = UIAlertController(title: "Alert", message:
        "You can only select one instrument. Unselect another instrument to select this one.", preferredStyle: .alert)
    alertController.addAction(UIAlertAction(title: "Okay", style: .default))

    self.present(alertController, animated: true, completion: nil)
}

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

Когда я нажимаю на гитарный переключатель (который в данный момент выключен - другой переключатель включен), первая часть кода пропускается, а средняя часть выполняется - гитарный переключатель выключается, и отображается предупреждение. Но затем выполняется первая часть кода: instrumentCounter - = 1.

Я не понимаю, почему это происходит.

1 Ответ

0 голосов
/ 22 апреля 2020

Я понял это. Я изменил «Отправленное событие» переключателей с «Значение изменено» на «Подправить внутри».

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