在Objective-C中,我经常会得到这样的代码:
if( ! [self.delegate respondsToSelector(shouldSelectItem:)] ||
[self.delegate shouldSelectItem: item] ) {
// ..
}
基本上,如果委托实现shouldSelectItem
,那么我调用该方法来查明是否应该继续if语句中的逻辑。如果它没有,那么我默认继续进入if语句。
在斯威夫特,到目前为止,我已达到以下目标:
if self.delegate?.shouldSelectItem?(item) ?? true {
// ...
}
如果委托没有实现该方法,则表达式的左操作数为nil,因此??
运算符将返回true。这个更短,但对我来说似乎有些尴尬。有没有更好的方法在Swift中表达这个概念?
答案 0 :(得分:0)
在swift中,你还要检查'respondsToSelector':
if self.delegate?.respondsToSelector(Selector("shouldSelectItem:")) {
... do your works
}
答案 1 :(得分:0)
相当于:
if( ! [self.delegate respondsToSelector(shouldSelectItem:)] || [self.delegate shouldSelectItem: item] ) {
是:
if self.delegate?.shouldSelectItem == nil || self.delegate!.shouldSelectItem!(item) {
但我更喜欢你的解决方案:)