這幾天都在用代碼的形式在完成滑動解鎖的功能,今天講到了代理設(shè)計(jì)模式。而完成一個(gè)代理只需要遵循下面的六個(gè)步驟。
?代理設(shè)計(jì)模式
首先,設(shè)計(jì)模式是什么:一種完成特定功能的方式。
類別Category:給已有的類添加方法。
代理Delegate:1.配置
2.兩個(gè)對象之間傳遞數(shù)據(jù)A(B) B-->A(A完成B的方法,但是B要將結(jié)果回調(diào)給A)
所有的設(shè)計(jì)模式都有一個(gè)固定的規(guī)范,所以代理設(shè)計(jì)模式也不例外:
UnlockModel(功能類):
1.寫一套代理(協(xié)議)
代理的方法就是回調(diào)的方式
@property TextSettingDelegate<NSObject>
//使用這個(gè)類對文本進(jìn)行配置,用戶配置完畢,通過這個(gè)方法將用戶配置的數(shù)據(jù)回調(diào)給調(diào)用者。
- (void)textWithSize:(CGFloat)size color:(UIColor *)color;
@end
2.聲明一個(gè)變量記錄調(diào)用者
@property (assign, nonatomic) id<TextSettingDelegate> delegate;
這里的id類型是為了適應(yīng)使用這個(gè)代理的各種數(shù)據(jù)類型,而這里的assign是因?yàn)榉乐瓜嗷ヂ暶魉袡?quán)而產(chǎn)生死鎖。
3.判斷調(diào)用者是否實(shí)現(xiàn)了相應(yīng)地回調(diào)方法(就是代理方法)
if([self.delegate respondsToSelector:@selector(textWithSize:color:)]){
[self.delegate textWithSize:30 color:[UIColor blueColor]];
}
使用者:
1.服從代理
@interface ViewController:
UIViewController<TextSettingDelegate>
2.設(shè)置功能類里面的delegate變量
//配置調(diào)用者為當(dāng)前的這個(gè)對象
svc.delegate = self;
(告訴功能類,功能類的毀掉方法在哪里實(shí)現(xiàn),換句話說就是誰來接收回調(diào)數(shù)據(jù))
3.實(shí)現(xiàn)相應(yīng)的代理方法(誰接收,誰就實(shí)現(xiàn))
- (void)textWithSize:(CGFloat)size color:(UIColor *)color{
self.sambolLabel.textColor = color;
self.sambolLabel.font = [UIFont systemFontOfSize:size];
}