我在谷歌上搜索了一下,但没有找到与respondsToSelector:等价的swift:是什么。

这是我唯一能找到的(Swift替代respondsToSelector),但在我的情况下并不太相关,因为它检查委托的存在,我没有委托,我只是想检查在设备上运行时是否存在新的API,如果没有回落到API的以前版本。


当前回答

看起来你需要把你的协议定义为NSObjectProtocol的子协议…然后你会得到respondsToSelector方法

@objc protocol YourDelegate : NSObjectProtocol
{
    func yourDelegateMethod(passObject: SomeObject)
}

注意,只指定@objc是不够的。你还应该注意,实际的委托是NSObject的子类——在Swift中可能不是。

其他回答

函数在Swift中是一类类型,所以你可以通过将协议中定义的可选函数与nil进行比较来检查它是否已经实现:

if (someObject.someMethod != nil) {
    someObject.someMethod!(someArgument)
} else {
    // do something else
}

斯威夫特3:

协议

@objc protocol SomeDelegate {
    @objc optional func method()
}

对象

class SomeObject : NSObject {

weak var delegate:SomeObject?

func delegateMethod() {

     if let delegateMethod = delegate?.method{
         delegateMethod()
     }else {
        //Failed
     }

   }

}

我猜你想为委托做一个默认实现。你可以这样做:

let defaultHandler = {}
(delegate?.method ?? defaultHandler)()

等价的是?接线员:

var value: NSNumber? = myQuestionableObject?.importantMethod()

importantMethod只在myQuestionableObject存在并实现它时才会被调用。

swift..另一种可能的语法。

 if let delegate = self.delegate, method = delegate.somemethod{
        method()
    }