【发布时间】:2016-04-18 01:53:57
【问题描述】:
关于 Swift 中的编码风格有点两难:
假设我们有 2 个变量都可以为 nil(可选),我们必须获取其中一个的值,或者如果两者都为 nil 则提前返回。
在 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-y。
func authenticate(_account: Account?) {
if _account == nil && self.defaultAccount == nil { return }
let account = _account == nil ? self.defaultAccount! : _account!
self.doLotsOfThings(account)
}
问题是;有没有办法使用 guard 做到这一点?如果没有,有没有更好的方法来处理这种情况?
谢谢。
【问题讨论】:
标签: swift coding-style optional