2015-04-04 49 views
2

任務很簡單:我需要創建將所有內容委託給包裝對象的包裝器。只有包裝對象的類型是包含可選方法的協議。我的包裝是實現相同的協議。如何使用可選方法包裝協議?

我該如何處理可選方法?我可以:

  1. 我可以在我的包裝中實現它們。但是,如果它們不是由被封裝的對象實現的,我會從這個實現中返回什麼?
  2. 不執行它們。在這種情況下,包裝對象將不會提供我不想要的包裝對象的某些功能。

有沒有更好的選擇?請注意,我在斯威夫特工作。

+0

我很確定你不能在Swift中這樣做,你將需要Obj-C,特別是訪問'NSInvocation'。或者只是忽略可選方法,因爲無論如何都有Obj-C功能。它們不存在於純Swift中。 – Sulthan 2015-06-15 11:56:01

+0

我知道[這個答案](http://stackoverflow.com/a/18777565/2792531)是Objective-C,但爲了清楚起見,你是否試圖在Swift中完成這樣的事情? – nhgrif 2015-06-15 11:57:58

回答

0

如果您使用可選方法,您將使用Objective-C運行庫。這意味着您可以查詢對象是否響應可選方法,更好地解釋爲here

如果您是Objective-C運行時的新手,可以通過Objective-C Runtime Programming Guide瞭解更多信息。

我認爲包裝應該在運行時檢查實現,如果缺少,那麼應該返回某種指示符,一個布爾可能,一旦調用這些可選方法之一。

+0

當然,我可以檢測包裝對象是否在運行時實現可選方法。到那時,無論是在包裝器中的方法是實現或不......這讓我們對你的建議檢查在運行時的實現和返回布爾或其他東西。包裝器只對客戶端可見(與用作包裝對象類型的協議相同)。我不能修改這個協議(Cocoa的一部分),所以我不能添加任何東西到包裝界面。 – drasto 2015-04-04 23:08:46