Это эквивалентно 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
.