如何寫delegate的繼承

項目中我們有時候會遇到這樣的問題,父類里面聲明了一個delegate,子類想借用這個delegate,就會繼承一下,或者擴展一下。
父類:

@protocol ManDelegate <NSObject>
- (void)myNameIs:(NSString*)name;
@end

@interface Man : NSObject
@property (nonatomic, weak) id<ManDelegate> delegate;
@end

子類:

@protocol FatherDelegte <NSObject>
- (void)mySonIs:(NSString*)son;
@end

@interface Father : Man
@property (nonatomic, weak) id<ManDelegate,FatherDelegte> delegate;
@end

或者

@protocol FatherDelegte <ManDelegate>
- (void)mySonIs:(NSString*)son;
@end

@interface Father : Man
@property (nonatomic, weak) id<FatherDelegte> delegate;
@end

使用沒問題,但是會遇到warning:

Auto property synthesis will not synthesize property 'delegate'; it will be implemented by its superclass, use @dynamic to acknowledge intention

這是由于父類已經聲明過了,子類再聲明也不會重新生成新的方法了。如果對警告沒有要求,可以湊合用,但是如果希望代碼整潔一點的呢,就要改下了。翠花,上代碼:

@dynamic delegate;
- (id<FatherDelegte>)delegate
{
    id curDelegate = [super delegate];
    return curDelegate;
}

- (void)setDelegate:(id<FatherDelegte>)delegate
{
    [super setDelegate:delegate];
}

這樣就解決了,其實warning里面已經給解決方案的提示了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 今天的狀態還不錯,看了教育學,收到了佳佳學姐中國政法大學復試順利的消息,真心為她高興,后天夢帆學姐去上師大復試,身...
    征人隨說閱讀 141評論 0 0
  • 大腦是混沌的
    不明覺厲Y閱讀 141評論 0 1
  • (一)昨日總結 96天 昨天一大早起誓,要關機,然后開始了遠離手機的生活。我認真學習,靜心和自己相處。直到下午六點...
    青衣雨翼_shape閱讀 409評論 0 0