2015-03-03 89 views
0

在Objective-C中,是否可以在第二個委託協議定義中包含與委託協議的一致性?我試圖避免這樣的模式:聲明委託符合另一個協議

if ([objectA conformsToProtocol:@protocol(privateDelegateProtocol)]) 
    { 
     id<privateDelegateProtocol> privateDelegate = (id<privateDelegateProtocol>)objectA; 
     objectB.privateDelegate = privateDelegate; 
    } 

我已經知道objectA符合我自己的委託協議@protocol(myDelegateProtocol),因爲事實上self.myDelegate = objectA。如果我能以某種方式在該協議定義,它也必須符合@protocol(privateDelegateProtocol)指定的話,我可以只寫:

objectB.privateDelegate = self.myDelegate; 

這似乎更簡單,更優雅。如果協議方法沒有實現,我寧願得到編譯時警告,而不必在運行時檢查它。有沒有辦法?

回答

3

協議可以按照類的相同方式繼承協議。

@protocol myDelegateProtocol <NSObject, privateDelegateProtocol> 
... 
@end 

任何符合該協議的對象都必須符合NSObject和privateDelegateProtocol協議。

您還可以指定您的委託必須符合兩種協議,而不要求所有符合myDelegateProtocol的對象都符合privateDelegateProtocol。

@property (nonatomic, weak) id<myDelegateProtocol, privateDelegateProtocol> delegate; 
+0

太棒了 - 謝謝!我不知道這些技巧,他們都非常有用! :-) – deltacrux 2015-03-03 06:05:06