我实现了一项将数据发布到网络服务的功能。当我需要发送不同类型的数据时,我已经创建了这样的selctor:
- (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];
}
但是如果不将 params 强制转换为正确的类型,这似乎是不可能的。
答案 0 :(得分:3)
使用id
类型。 id
是Objective-C中使用的特殊关键字,表示“某种对象。”
- (void)postRequest:(NSString *)service toEndpoint:(NSString*)endpoint withParams:(id)params
答案 1 :(得分: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
答案 2 :(得分:0)
此外,您可以使用NSObject
的子类,例如ParametersObject
,并确保将在withParams参数上发送的所有对象都继承自此类。
此类必须实现所需的所有选择器,例如objectToDictionary:
。