Ну && and ||
операторы в быстром Left Associative
, что означает, что ваша оценка условий идет от left hand side
.
(opt != nil). // result 1
это условие будет оцениваться в первую очередь и при использовании оператора ||
.
Secondaly your (opt?.x != 10 && opt2?.y != 20)
// result 2
теперь получим оценку, если ваш результат 1 равен false, иначе он бы попал в цикл из-за оператора ||
Конечное состояние
if (result 1 || result 2) {
если верен только результат 1, он не оценивается для результата 2 из-за || оператор в противном случае будет вычислять результат 2, и если результат 2 является истинным, его успех