2012-03-16 23 views
2

從Apples iADSuite選項卡式示例中,有一個用委託定義的變量。澄清UIViewController <Delegate> * _variable; iAdSuite選項卡式示例(iOS)中的聲明

UIViewController<BannerViewContainer> *_currentController; 

後,它的演員陣容如此

_currentController = (UIViewController<BannerViewContainer> *)_tabBarController.selectedViewController; 

什麼在聲明使用「BannerViewContainer」,它與後來的演員和怎麼在這裏在幕後發生的事情的意義是什麼?

問候

吉姆

回答

0

沒有什麼可以做這裏的代表。 BannerViewContainerprotocol。 (你可能會感到困惑,因爲委託通常是通過協議來定義的。)

用角括號協議名聲明變量或參數意味着分配給它的任何東西必須是符合該協議的對象:如果試圖通過一個UIViewController或其子類的實例,你會得到一個編譯器警告,除非該實例是UIViewController子類,它聲明符合BannerViewContainer協議。 (也就是說,你可以,如果它的頭文件中讀取@interface FooViewController : UIViewController <BannerViewContainer>傳遞的FooViewController一個實例。)

你看到後遵循相同的模式儘可能多的石膏塑像:這是哪裏的程序員都知道,他的分配對象符合的情況下,對該變量的要求,但是他使用的引用沒有匹配的聲明。也就是說,標籤欄控制器只知道其選擇的視圖控制器是一個UIViewController(或其任何子類),但程序員知道他放入標籤欄的視圖都符合BannerViewContainer協議的UIViewController子類。

+0

好的,通過您的重定向,我閱讀了關於協議的鏈接,併爲未來的讀者帶來了好處,看到「Formatter * anObject;」膿這個「id anObject;」 「可以合併成一個單一的聲明」給予「Formatter * anObject;」確定要消化特別不起眼的線條,比如「組合所有對象......不管它們在類層次結構中的位置」p.s.當我參加協議內的協議時,我退出了doco ..留給那些下雨天:) – JimZ 2012-03-16 09:45:10