0

我已经实现了一个将数据发布到 Web 服务的功能。当我需要发送不同类型的数据时,我创建了这样的选择器:

- (void)postRequest:(NSString *)service toEndpoint:(NSString*)endpoint withParams:(NSObject *)params 

当我不知道它是什么类型的对象时,如何在 params 对象上运行方法?currentlig 我已经为我发布的每种类型实现了一个测试转换场景,但这是实现这一点的不好方法......就像这样:

if([params isKindOfClass:[Order class]]){
  Order *order = (Order *) params;
  jsonString = [order objectToDictionary];
}

我已经尝试过:

if ([params respondsToSelector:@selector(objectToDictionary:)]) {
  jsonString = [params objectToDictionary];
}

但是,如果不将参数转换为正确的类型,这似乎是不可能的。

4

3 回答 3

3

使用id类型。id是 Objective-C 中使用的一个特殊关键字,表示“某种对象”。

- (void)postRequest:(NSString *)service toEndpoint:(NSString*)endpoint withParams:(id)params
于 2013-10-31T09:28:37.423 回答
2

使请求中发送的所有对象都符合相同的协议。然后你可以定义方法签名如下:

- (void)postRequest:(NSString *)service toEndpoint:(NSString*)endpoint withParams:(id<YourPostRequestProtocol>)params;

然后在YourPostRequestProtocol你可以定义方法

- (NSDictionary *)objectToDictionary;

并且每个对象,例如Order,都可以符合该协议并实现该方法。

@interface Order : NSObject<YourPostRequestProtocol>

@end

@implementation

- (NSDictionary *)objectToDictionary
{
   // The implementation for this object
}

@end
于 2013-10-31T09:36:33.563 回答
0

您也可以使用类似的子类,NSObjectParametersObject确保将在 withParams 参数上发送的所有对象都继承自此类。

此类必须实现您需要的所有选择器,objectToDictionary:例如。

于 2013-10-31T09:40:01.140 回答