在OC中有個方法可以判斷對象方法是否被實現(xiàn)捺球,是responseToSelector,在查找swift是否有這個功能的時候基本上網(wǎng)上都是告訴用這個方法來判斷,但是這個方法是根據(jù)runtime來判斷的警儒,是swift不具備的功能,所以如果用swift調用這個方法會報錯眶根,swift是用了另一個機制蜀铲。
首先用一個例子說明:
如果定義一個代理:
@objc protocol delegate {
@objc optional func buyBtnClicked()
@objc optional func makeSureGetHD()
@objc optional func mailEquipment()
}
定義了3個可選的方法。
首先要判斷delegate是否存在汛闸,然后在判斷方法是否被實現(xiàn):
if self.delegate?.buyBtnClicked?() == nil {
// code
}
這么調用就可以了蝙茶。
self.delegate?如果有delegate會返回一個delegate艺骂,如果沒有就會返回nil诸老,self.delegate?. buyBtnClicked?(),如果delegate存在并且實現(xiàn)了buyBtnClicked這個方法,那就會調用這個方法别伏,如果代理不存在或者是沒有實現(xiàn)這個方法蹄衷,會返回nil,但是不會崩潰厘肮,這樣就可以判斷方法是否實現(xiàn)愧口,但是要注意在做這個方法的判斷的時候如果已經(jīng)實現(xiàn)了,會直接調用类茂,不要像OC時在判斷完在調用一遍方法耍属。