属性 指的是两个 Block 的公共接口
Property referring to a common interface for two Blocks
我有一个 class Request
应该有一个回调块 属性,我们称它为 RequestCallback
。
不应使用请求本身,但它有两个子class。 APIRequest
和 HttpRequest
。 (是的,在这种情况下是有区别的)。
APIRequest
和 HttpRequest
的回调块不同,我们称它们为 APIRequestCallback
和 HttpRequestCallback
。
块定义:
typedef void (^HttpRequestCallback)(HttpResponse *);
typedef void (^APIRequestCallback)(APIResponse *);
我还没有找到任何方法让我的请求 class 有一个回调 属性,它可以是 APIRequestCallback
或 HttpRequestCallback
类型。
我能想到可以做到这一点的方法,但我还没有看到任何暗示。示例将我的回调对象存储为 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;
有技术高超的 objective C 开发人员对此有解决方案吗?
我找到了一个目前令我满意的可行解决方案。有知道的请赐教
Request
class 使用以下块类型定义:
typedef void (^RequestCallback)(id);
并像这样使用 属性:
@property (copy) RequestCallback callback;
这是有效的,因为 id 类型不区分 APIResponse
对象和 HttpResponse
对象。我很想使用 Objective C 的新泛型语法来强制类型成为 Response
的 __covariant 但我无法让它工作。
我有一个 class Request
应该有一个回调块 属性,我们称它为 RequestCallback
。
不应使用请求本身,但它有两个子class。 APIRequest
和 HttpRequest
。 (是的,在这种情况下是有区别的)。
APIRequest
和 HttpRequest
的回调块不同,我们称它们为 APIRequestCallback
和 HttpRequestCallback
。
块定义:
typedef void (^HttpRequestCallback)(HttpResponse *);
typedef void (^APIRequestCallback)(APIResponse *);
我还没有找到任何方法让我的请求 class 有一个回调 属性,它可以是 APIRequestCallback
或 HttpRequestCallback
类型。
我能想到可以做到这一点的方法,但我还没有看到任何暗示。示例将我的回调对象存储为 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;
有技术高超的 objective C 开发人员对此有解决方案吗?
我找到了一个目前令我满意的可行解决方案。有知道的请赐教
Request
class 使用以下块类型定义:
typedef void (^RequestCallback)(id);
并像这样使用 属性:
@property (copy) RequestCallback callback;
这是有效的,因为 id 类型不区分 APIResponse
对象和 HttpResponse
对象。我很想使用 Objective C 的新泛型语法来强制类型成为 Response
的 __covariant 但我无法让它工作。