美文网首页
delegate - 代理基础- 02

delegate - 代理基础- 02

作者: js_huh | 来源:发表于2020-07-23 00:13 被阅读0次

    delegate-代理基础01


    是什么?

    • 协议代理的传值
      委托方 通过协议里含有参数的方法,将值传递到代理方
    • 回调
      通过带有返回值的协议方法,将数据从代理方传递到委托方

    示例代码

    • 厨师叫服务员传菜,并且告诉他,顾客对这菜的评价!
    -- 协议
    #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

    相关文章

      网友评论

          本文标题:delegate - 代理基础- 02

          本文链接:https://www.haomeiwen.com/subject/vfntlktx.html