【发布时间】:2016-03-29 22:27:21
【问题描述】:
我有两个班(例如 BusyMan 和 NotBusyMan),BusyMan 想看电影,但他没有时间去买票,NotBusyMan 可以帮助他。 BusyMan 有一个名为 delegate 的属性
@property(nonatomic) id<BusyManDelegate> delegate;
NotBusyMan 是 BusyMan 的代表
busyMan.delegate = notBusyMan;
还有
@interface NotBusyMan : NSObject <BusyManDelegate>
假设在 BusyManDelegate 协议中声明了一个方法
@protocol BusyManDelegate<NSObject>
@optional
- (BOOL)buyTicketForMe;
@end
当 NotBusyMan 为 BusyMan 买票时,它返回 YES。 所以 BusyMan 可以这样问 NotBusyMan
BOOL result = [self.delegate buyTicketForMe];
if (result) {//I may watch the film now
}else{//Oh No
}
但 buyTicketForMe 是可选的,如果 NotBusyMan 没有实现该方法怎么办?我们都知道结果:一个异常,“无法识别的选择器发送到实例......”,可能会引发。 所以,我想在委托调用方法之前添加条件,
if (my delegate implemented the method,and it won't raise an excetion) {
BOOL result = [self.delegate buyTicketForMe];
if (result) {//I may watch the film now
}else{//Oh No
}
}
条件部分怎么写。
顺便说一句,responseToSelector: 不会有帮助,一旦接收者声明了 SEL,它就会返回 YES,实现的东西将被忽略。
【问题讨论】:
-
respondsToSelector:不检查声明。它检查实施。如果它对您不起作用,则说明您在某处有错误。 -
这就是为什么您应该在向 SO 发布问题之前尝试代码。
标签: ios objective-c delegates protocols