我正在通過蘋果提供的Programming with Objective-C文件。一個符合協議的身份證明與一個協議的身份證明ID
我想了解以下段落,但到目前爲止,無法做到這一點。
@protocol XYZPieChartViewDataSource
- (NSUInteger)numberOfSegments;
- (CGFloat)sizeOfSegmentAtIndex:(NSUInteger)segmentIndex;
@optional
- (NSString *)titleForSegmentAtIndex:(NSUInteger)segmentIndex;
@required
- (UIColor *)colorForSegmentAtIndex:(NSUInteger)segmentIndex;
@end
@interface XYZPieCharView : UIView
@property (weak) id <XYZPieChartViewDataSource> dataSource;
// some additional stuff
@end
如果您嘗試調用respondsToSelector:方法上,因爲它的上面定義符合協議的ID ,你會得到一個 編譯器錯誤有沒有它的已知實例方法。一旦你通過一個協議對一個id進行了限定,所有的靜態類型檢查都會返回; 如果您嘗試調用指定協議中未定義的任何方法 ,則會出現錯誤。避免編譯器錯誤的一種方法是將 設置爲使用NSObject協議的自定義協議。
我對「符合協議」和「使用協議限定某個對象」之間的區別感到困惑。如果我們發送一個id - 符合協議 - respondsToSelector
消息,爲什麼編譯器會產生錯誤?
到目前爲止我已經實現了很多很多的協議數據源代表,但我無法確切地說出句子想要解釋的內容。但是,我使用的協議沒有問題。以我個人的拙見來看,我認爲你要在實際情況下實現它,並且看看它是如何工作的,並且感覺當你需要一個協議是最快的學習方式時。 – John