У меня есть экран с несколькими переключателями, чтобы пользователь мог выбрать элемент. Я хочу ограничить выбор пользователем только одного элемента.
Я объявляю эту переменную в начале класса перед функцией 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.
Я не понимаю, почему это происходит.