我有一个应该有Callback-block属性的类Request
,让我们调用它RequestCallback
。
不应使用请求本身,但它有两个子类。 APIRequest
和HttpRequest
。 (是的,在这种情况下有区别)。
APIRequest
和HttpRequest
的回调功能块不同,我们称之为APIRequestCallback
和HttpRequestCallback
。
块定义:
typedef void (^HttpRequestCallback)(HttpResponse *);
typedef void (^APIRequestCallback)(APIResponse *);
我还没有找到任何方法让我的Request类有一个Callback属性,可以是APIRequestCallback
或HttpRequestCallback
类型。
我可以想办法做到这一点,但我没有看到任何暗示它的东西。示例是将我的Callback对象存储为id
,让APIRequestCallback
和HttpRequestCallback
扩展已定义的RequestCallback
等。
// Can be either HttpRequestCallback or APIRequestCallback
@property (copy) RequestCallback callback;
// or
@property (strong) id callback;
// or
@property (strong) id <RequestCallback> callback;
一些熟练的目标C开发人员是否有解决方案?
答案 0 :(得分:0)
我找到了一个令我满意的工作解决方案。如果有人知道的更好,请教育我。
Request
类使用以下Block typedef:
typedef void (^RequestCallback)(id);
使用这样的属性:
@property (copy) RequestCallback callback;
这是有效的,因为id类型不区分APIResponse
个对象和HttpResponse
个对象。我很乐意使用Objective C的新Generics语法来强制该类型成为Response
的__covariant但我无法使其工作。