бит дилеммы о кодировании стиль в Swift:Swift: раннее возвращение, если оба варианта равны нулю?
Скажем у нас есть 2 переменные, которые оба могут быть нулевыми (ОПЦИИ), и мы должны получить значение одного из них или вернуться рано, если оба равны нулю.
В Objective-C было бы написано так:
- (void)authenticate:(Account*)anAccount {
Account* account = anAccount ?: self.defaultAccount();
if (!account) return;
doLotsOfThings(account);
}
я мог бы выяснить несколько способов переписать его в Swift, но все они введены код запах.
Swift: с кодом дублирования
func authenticate(_account: Account?) {
if let account = _account {
self.doLotsOfThings(account)
} else if let account = self.defaultAccount {
self.doLotsOfThings(account)
}
}
Swift: это решает дублирования кода, но не чувствует себя очень Swift-у.
func authenticate(_account: Account?) {
if _account == nil && self.defaultAccount == nil { return }
let account = _account == nil ? self.defaultAccount! : _account!
self.doLotsOfThings(account)
}
Вопрос есть; есть ли способ сделать это, используя guard
? Если нет, есть ли более эффективные способы борьбы с этим делом?
Спасибо.