是什么?
- 协议代理的传值
委托方 通过协议里含有参数的方法,将值传递到代理方。 - 回调
通过带有返回值的协议方法,将数据从代理方传递到委托方。
示例代码
- 厨师叫服务员传菜,并且告诉他,顾客对这菜的评价!
-- 协议
#import <Foundation/Foundation.h>
@protocol ConveyProtocol <NSObject>
-(NSString *)sendThing:(NSString *)thingName; //传递物品,接收反馈
@end
-- 委托方
#import "ConveyProtocol.h"
@interface Chef : NSObject
@property(nonatomic,weak)id <ConveyProtocol> delegate; //设置代理属性
-(void)sendFood; //传菜
@end
@implementation Chef
-(void)sendFood{
NSLog(@"快来传菜...");
if ([self.delegate respondsToSelector:@selector(sendThing:)]) {
NSString* info = [self.delegate sendThing:@"辣子鸡丁"];
NSLog(@"味道如何?%@",info);
}
}
@end
-- 代理方
#import "ConveyProtocol.h"
@interface Waiter : NSObject <ConveyProtocol>
@end
@implementation Waiter
- (NSString *)sendThing:(NSString *)thingName {
NSLog(@"服务员把'%@'端上去",thingName);
NSString * evaluateInfo =[NSString stringWithFormat:@"顾客反馈说,%@太好吃了,真棒!",thingName];
//@"太好吃了,真棒!";
return evaluateInfo;
}
-- 使用代理
- (void)viewDidLoad {
[super viewDidLoad];
Waiter * wa = [[Waiter alloc]init];
Chef * cf = [[Chef alloc]init];
cf.delegate = wa;
[cf sendFood];
}
注意:
-
委托方在调用代理协议的方法时,要判断代理方是否实现了此方法
respondsToSelector:
否则报错 NSInvalidArgumentException
也可以看看
来自于哪里?
- iOS-MJ-UI基础-大神班/临散知识点/delegate-代理基础-02
网友评论