2011年11月20日 星期日

iOS - Training (2) - Protocol & Delegate

Protocol -----
與iOS自有的interface相似,不同在於protocol中無法宣告變數。

Usage
宣告一個叫Omniprinter的protocol
@protocol Omniprinter
-(void) printInt:(int) intVar;
-(void) printObj:(NSString*) obj;
@end
在interface採用
@interface Hello:NSObject<omniprinter>
@end
若採用多個protocol時
@interface Hello:NSObject<omniprinter, protocol1, ...>
@end

其特性與Java的interface相同,比較特別的是在protocol當中可以加入修飾詞optional、required來決定是否一定要實作,預設值為required。

Usage
@protocol Omniprinter
@optional
-(void) printInt:(int) intVar;
@required
-(void) printObj:(NSString*) obj;

在iOS中,類似泛型的用法如下:
表示變數的實體物件必需滿足Omniprinter這個protocol所宣告的方法
id<Omniprinter> delegate;

表示類別變數的實體物件必需是Hello類別,且Hello類別必需實作Omniprinter這個protocol內的方法
Hello<Omniprinter>* delegate;
-----

資料出處《Object-C與iOS開發入門》

沒有留言:

張貼留言