定义一套接口,某对象若想接受另一个对象的委托,则需要遵循此接口,以便成为其 "委托对象”。而这 ”另一个对象“ 则给其委托对象回传一些信息,也可以在发生相关时间时通知委托对象。
类似于 我们找黄牛帮我们买票
简单实现
结构中 Buy 是一个 协议
// main.m
#import "XiaoMing.h"
@implementation XiaoMing
- (void)buyTickets{
NSLog(@"xiaoming buy tickets");
}
@end
// Dahua.h
#import <Foundation/Foundation.h>
#import "Buy.h"
NS_ASSUME_NONNULL_BEGIN
@interface DaHua : NSObject
// 设置代理人
@property (nonatomic, weak) id<Buy> delegate;
- (void) letXiaoMingBuy;
@end
NS_ASSUME_NONNULL_END
// DaHua.m
#import "DaHua.h"
@implementation DaHua
- (void)letXiaoMingBuy{
[self.delegate buyTickets];
}
@end
// XiaoMing.h
#import <Foundation/Foundation.h>
#import "Buy.h"
NS_ASSUME_NONNULL_BEGIN
// 委托对象
@interface XiaoMing : NSObject <Buy>
@end
NS_ASSUME_NONNULL_END
// XiaoMing.m
#import "XiaoMing.h"
@implementation XiaoMing
- (void)buyTickets{
NSLog(@"xiaoming buy tickets");
}
@end
// Buy.h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol Buy <NSObject>
// 委托的方法
- (void)buyTickets;
@end
NS_ASSUME_NONNULL_END
方法为
为了保证有 对应的委托方法,
我们需要加一个动态判断
// DaHua.m
#import "DaHua.h"
@implementation DaHua
- (void)letXiaoMingBuy{
if([self.delegate respondsToSelector:@selector(buyTickets)]){
[self.delegate buyTickets];
}
}
@end