Amo*_*kar 6 delegates objective-c objective-c-blocks
我有一个类,它有一个基于委托的系统,用于发送不同类型的请求.它使用委托在请求完成时告诉对象,如果成功则是错误.
现在,我还必须检查响应采取适当行动的请求类型.
我有包装类,应该给我一个基于块的接口.
我将一个完成块和一个错误块传递给一个请求方法,该方法应该在内部使用这个基于委托的类.
当响应到来时,应该自动为该请求类型调用适当的处理程序,并根据成功和错误.
我在SO上看到了一个类似的问题,但对我来说有点不清楚,所以请大致了解如何去做,而不是马上把它标记为重复.
这是一种方法。使用此RAExpendable类通过基于块的实现动态构建委托。
假设您的代表是:
@protocol XDelegate
-(void) foo:(id)response;
@end
Run Code Online (Sandbox Code Playgroud)
将https://github.com/evadne/RAExpendable中的 RAExpendable.h、RAExpendable.m 添加到您的项目中。动态添加委托方法:
RAExpendable *expendable = [RAExpendable new];
[expendable addMethodForSelector:@selector(foo:) types:"v@:@" block:^(id x, SEL sel, id response){
NSLog(@"response is %@", response);
}];
Run Code Online (Sandbox Code Playgroud)
并将该类设置expendable
为您的代表:
someObject.delegate = expendable;
Run Code Online (Sandbox Code Playgroud)
现在,如果你这样做:
[expendable performSelector:@selector(foo:) withObject:@"OK"];
Run Code Online (Sandbox Code Playgroud)
你得到了字符串response is OK
。将 NSLog 替换为您认为合适的任何成功/失败实现。从现在开始,当您调用 时foo:
,该块将改为执行。
如果您想根据您的用例修改此参数,请注意此示例的参数为v@:@
,根据运行时的类型编码指南,其含义为:void return、self、SEL、object。self
和SEL
是每个 Objective-C 方法中存在的两个隐藏参数,第三个参数是该方法的第一个非隐藏参数。块的签名必须与方法的签名匹配。
归档时间: |
|
查看次数: |
1510 次 |
最近记录: |