如何将这个Objective-C成语移植到Swift?

时间:2014-12-23 13:48:40

标签: objective-c swift

在Objective-C中,我经常会得到这样的代码:

if( ! [self.delegate respondsToSelector(shouldSelectItem:)] || 
    [self.delegate shouldSelectItem: item] ) {
  // ..
}

基本上,如果委托实现shouldSelectItem,那么我调用该方法来查明是否应该继续if语句中的逻辑。如果它没有,那么我默认继续进入if语句。

在斯威夫特,到目前为止,我已达到以下目标:

if self.delegate?.shouldSelectItem?(item) ?? true {
  // ...
}

如果委托没有实现该方法,则表达式的左操作数为nil,因此??运算符将返回true。这个更短,但对我来说似乎有些尴尬。有没有更好的方法在Swift中表达这个概念?

2 个答案:

答案 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) {

但我更喜欢你的解决方案:)