在OC中有个方法可以判断对象方法是否被实现,是responseToSelector,在查找swift是否有这个功能的时候基本上网上都是告诉用这个方法来判断,但是这个方法是根据runtime来判断的,是swift不具备的功能,所以如果用swift调用这个方法会报错,swift是用了另一个机制。
首先用一个例子说明:
如果定义一个代理:
@objc protocol delegate {
@objc optional func buyBtnClicked()
@objc optional func makeSureGetHD()
@objc optional func mailEquipment()
}
定义了3个可选的方法。
首先要判断delegate是否存在,然后在判断方法是否被实现:
if self.delegate?.buyBtnClicked?() == nil {
// code
}
这么调用就可以了。
self.delegate?如果有delegate会返回一个delegate,如果没有就会返回nil,self.delegate?. buyBtnClicked?(),如果delegate存在并且实现了buyBtnClicked这个方法,那就会调用这个方法,如果代理不存在或者是没有实现这个方法,会返回nil,但是不会崩溃,这样就可以判断方法是否实现,但是要注意在做这个方法的判断的时候如果已经实现了,会直接调用,不要像OC时在判断完在调用一遍方法。