Свифт необязательный несколько тестов в условных - PullRequest
0 голосов
/ 03 мая 2018

Я хочу сделать что-то подобное с опциональным в Swift.

 var opt:MyOptional?

func myfunction() {
   if (opt == nil) || (opt?.x != 10 && opt?.y != 20)) {
    opt = MyOptional()
    opt.x = 10
    opt.y = 20
 }
}

Мой вопрос: допустимый ли это шаблон, даже если он компилируется и запускается? Компилятор Swift обеспечивает выполнение условия 2 после условия 1 (opt! = Nil)?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Ну && 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 является истинным, его успех

0 голосов
/ 03 мая 2018

Если у вас есть опечатка, этот код должен выглядеть следующим образом:

struct MyOptional {
    var x: Int = 0
    var y: Int = 0
}
class SomeClass {
    var opt: MyOptional?

    func myFunction() {
        if let unwrappedOpt = opt,
            unwrappedOpt.x != 10 && unwrappedOpt.y != 20 {
            opt = MyOptional(x: 10, y: 20)
        }
    }
}

А как насчет вашего вопроса? Вы правы.

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