我正在构建作为 REST 服务器客户端的 iOS 应用程序。到目前为止,我一直在以一种非常简单的方式处理我的所有请求。每当我需要拨打电话时,我都会执行以下操作:
[ApiRequestManager sendApiCall:@"dogs/getSomeDog"
withParams:@{ @"dog_name": @"freddo" }
callback:^(NSDictionary *result) {
// do something with the response data already unserialized
// (comes as JSON) by the ApiRequestManager static method.
}];
随着应用程序复杂性的增加,我意识到如果我真的进行子类化NSMutableURLRequest
并制作自己的响应协议,它会更干净(并且测试的工作量更少),如下所示:
@protocol ApiRequestDelegate <NSObject>
- (void)apiRequest:(ApiRequest *)request didSucceedWithResult:(NSDictionary *)result;
@optional
- (void)apiRequest:(ApiRequest *)request didFailWithError:(NSError *)error;
@end
这使我可以分离用于构建请求和处理其响应的代码等。当我开始使用委托模式替换我的旧调用时,一切都很好,但是!然后我意识到在这里和那里,我正在做这样的事情:
// in class Dog
+ (void)putLeashOnDogs:(NSArray *)dogs {
NSString *ids = // collect IDs from dogs
[ApiRequestManager sendApiCall:@"dogs/putLeash"
withParams:@{ @"dog_ids": ids }
callback:^(NSDictionary *result) {
// something
}];
}
我的问题是,我能否以某种方式说“这个类具有 X 协议方法的静态版本”,然后在我创建委托对象(即 ApiRequest 实例)的静态方法中只说myRequest.delegate = self
?如果我不能或有更好/更清洁/更正确的方法来解决这个问题,我有什么选择?