使用轻量级Objective-C泛型的通用方法

时间:2017-04-13 09:01:21

标签: objective-c generics

我有一个通用的HTTP请求类型:

@interface Request: NSObject

- (id) parseResponseData: (NSData *) data;

@end

我可以注释以获得一些泛型支持:

@interface Request<__covariant T>

- (T) parseResponseData: (NSData *) data;

@end

现在Xcode正确地建议了特定的返回类型:

Request<NSString*> *request = [Request new];
NSNumber *bar = [request parseResponseData:nil]; // I get a warning, nice!

我还有一个加载Webservice的{​​{1}}类,并返回Request的可空实例:

T

有没有办法在Objective-C中表示加载@interface Webservice - (id) loadSynchronously: (Request *) request; @end 会返回Request<Foo*>而不是Foo*

我提出的最好的方法是反转电话:

id

这是一个有趣的黑客,但不是一个好的API。也许有一个类似的黑客潜伏在某个可以更好的地方?

0 个答案:

没有答案