Как написать это условие, используя охрану - PullRequest
0 голосов
/ 04 июня 2019

Я хочу это условие, используя guard let.

if (self.fromLocation == nil || self.toLocation == nil) && self.key.isEmpty {
    return
}
print("fromLocation and toLocation are not nil and key isn't empty") 

Изначально у меня было

guard let fromLoc = self.fromLocation, let toLoc = self.toLocation else {
    return
}
print(fromLoc,toLoc)

Теперь мне нужно продолжить, даже если один или оба self.fromLocation,self.toLocation равны нулю, только если key.isEmpty равно false

Вышеуказанное if условие работает. Но как я могу написать это, используя guard let?

Условие 1. Если ключ пустой и от и до должен быть не ноль

Условие 2. Если ключ не пуст и может быть равен нулю

1 Ответ

4 голосов
/ 04 июня 2019

Это эквивалентно guard утверждению:

guard (self.fromLocation != nil && self.toLocation != nil) || !self.key.isEmpty else {
    return
}

Пояснение:

Я пришел к этому, взяв утверждение, когда мы хотим return:

(self.fromLocation == nil || self.toLocation == nil) && self.key.isEmpty

и отрицание, чтобы получить, когда мы хотим остаться:

!((self.fromLocation == nil || self.toLocation == nil) && self.key.isEmpty)

Применение закона де Моргана !(A && B) <==> !A || !B:

!(self.fromLocation == nil || self.toLocation == nil) || !self.key.isEmpty

и затем применение закона Де Моргана !(A || B) <==> !A && !B:

(!(self.fromLocation == nil) && !(self.toLocation) == nil) || !self.key.isEmpty

и затем отметив, что !(A == nil) <==> A != nil дает нам окончательный результат:

(self.fromLocation != nil && self.toLocation != nil) || !self.key.isEmpty

Примечание:

Вы сказали, что хотите сделать это с guard let, но это не имеет смысла, поскольку вы заявили, что готовы продолжить, если одна или обе переменные равны nil, пока ключ не пуст, поэтому невозможно гарантировать, что развернутые переменные будут существовать после оператора guard.

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