Странное поведение else if


#1

Пробую использовать else if, но уже второй раз он ничего не обрабатывает. При том, если вынести else if в обычный if, то все работает. Значение не менятся. В чем проблема?
Скрины


#2

Значит у вас сработало условие до этого.
Else if будет вызываться, если предыдущие условия не прошли. Иначе проверка условий прекращается.


#3

Но они не прошли тоже


#4

лучше вставьте проблемный код, не нужно кидать млн строк кода, просто те, в которых у вас проблемы/вопросы.


#5

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

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


#6

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


#7

Чего вы пытаетесь добиться?
— доказать, что swift не поддерживает множественное if else? – проверьте в playGround”e
— получить помощь по коду? – скиньте код (желательно весь в GitHub)
— выловить баг? – дебаггер в помощь


#8

Используйте switch и какой-нибудь флаг для отметки первого срабатывания.

Если нужна именно последовательная проверка условий, то почему просто if в if не вложить? Или guard использовать.


#9

Если я так сделаю, то следующий иф сработает только если сработает первый, а нужно чтобы с ключей удалилось одно с трех значений, которое идет первый.
Свитч не получится использовать, тк у меня проверяется разные переменные


#10

Я уверен в том, что свифт поддерживает множественное else if и хочу узнать, почему при добавлении именнно проверки значение последней переменной у меня не работает весь if.


#11

вам уже ответили: как минимум нужно видеть код - скорее у вас где-то ошибка.


#12

На скриншотах он есть.


#13

А, ну с такой позицией - удачи.


#14

Чтобы вам помочь нужно скачать скриншоты кода, а возможно потом со скриншотов еще перепечатать его себе, чтобы поэкспериментировать. Так мало кто будет делать, чтобы помочь.
Вставьте сюда блок кода, и описание ошибки и будет намного проще.


#15

А какое значение у вас лежит в affiliate[0] на момент тестирования? Вы ставили breakpoints на 69, 72, 76 строки?


#16

Со значением все нормально, если убрать последнюю проверку,то иф успешко выполнняется, при том, что значение не меняется
Брейкпоинты ничего недадут, у меня просто даже не начинает выполнятся иф. Добавил в конец else, он тоже ничего не делает


#17
if affiliates[0].phone.isEmpty {
keys.remove("Что то удалить")
print("removed")
} else if affiliates[0].docexpert.isEmpty {
keys.remove("Что то удалить")
print("removed1")
}  else if affiliates[0].infoanaliticyexpert.isEmpty {
keys.remove("Что то удалить")
print("removed2")
}

Если добавляю последний участок, весь елсе иф не срабатівает

else if affiliates[0].infoanaliticyexpert.isEmpty {
keys.remove("Что то удалить")
print("removed2")
}

#18

Поставьте всё-таки один брейкпоинт после вашей конструкции if else и пришлите скрин, где будет видно код, консоль и развернутую модель по нулевому индексу. Примерно так:


#19

Тут не совсем понятно почему вы записываете именно так.
Тут ведь может случиться, что и affiliates[0].phone.isEmpty будет true и affiliates[0].docexpert.isEmpty тоже true, но if сработает для первого из них. По аналогии и со следующим условием.

Обычно if используется немного для другого, а эту всю красоту вам нужно записать в отдельных if else не связанных между собой, если я все понял правильно.

Если вы хотите просто понять как это работает, то можно придумать более простой пример, если так, то можем с этим помочь.


#20

Сделал так, работает и ладно