2016-05-25 66 views
0

我的問題更多的是一個普遍的問題,而不是一個具體的問題。看起來,對於用Swift編寫的類,您可以使用可選工作流來驗證方法是否存在(?)。如果沒有,你可以假設它返回nil什麼時候在swift中使用respondsToSelector?

這似乎只適用於類是用Swift編寫的。 (這是一個修正假設)?

現在,如果您正在引用一個Objective-C類並希望檢查是否存在某個方法,則可以使用respondsToSelector檢查與選擇器#selector

這是否意味着僅用於Objective-C類和Swift類,協議,從Objective-C類繼承的協議/類擴展?

讓我知道我是否應該擴展任何部分的問題。

+0

請檢查這個帖子http://stackoverflow.com/questions/24167791/what-is-the-swift-equivalent-of-respondstoselector –

+0

謝謝你,當猜測當檢查協議方法是否已經實現,它仍然基於類型是否符合nsobject。 – Chris

回答

1

幾乎沒有任何需要在Swift中顯式調用respondsToSelector。唯一一次你想要做的是處理一個NSObject,在這種情況下,它可能是一個AnyObject或一個委託協議接受者,無論哪種情況,你都可以使用問號語法(它調用respondsToSelector爲你)。

+0

但是當你實現一個可可類或子類時,你仍然在處理nsobject,對嗎?我想如果所有的可可類都被轉換成了快速的,我不會100%確定。謝謝大家的輸入! – Chris

+0

@ cmarti1138:是的,Cocoa類是Objective-C類,所以它們的方法是Objective-C方法,如果它們響應,你可以使用可選機制和AnyObject來調用這些方法。如果你的問題是如果這個表達式的類型不是'AnyObject',你可以先把它轉換成'AnyObject':(... as AnyObject).method?(...)' – newacct

+0

Ty for大家的答案! – Chris

0

看來,對於用Swift編寫的類,可以使用 可選工作流來驗證方法是否存在(?)。如果它不 不,你可以認爲它返回零。

這似乎只適用於類是用Swift編寫的。 (這是一個修正假設)?

這是不正確的。當您說「使用可選的工作流程來驗證方法是否存在」時,我假定您的意思是當您使用Using Swift的「id Compatibility」部分中的「無法識別的選擇器和可選鏈接」中所述的類型AnyObject上的方法調用方法時可可和Objective-C指南。

此功能只有與Objective-C(@objc)方法一起使用。 AnyObject允許您只動態訪問Objective-C(@objc)方法。

您可以調用任何Objective-C方法並訪問AnyObject值上的任何屬性,而不必強制轉換爲更具體的類類型。此 包含Objective-C兼容方法和用 @objc屬性標記的屬性。

您不能使用AnyObject來調用純Swift(非@objc)方法。

+0

對不起,我打算說方法確實存在時。我糾正了我的問題。 – Chris

+0

@ cmarti1138:我改變了引用來說 – newacct

相關問題