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];
}

しかし、paramsを正しい型にキャストしないと、それは不可能に思えます。

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

また、次のNSObjectようなサブクラスを使用ParametersObjectして、withParams 引数で送信されるすべてのオブジェクトがこのクラスから継承されるようにすることもできます。

objectToDictionary:このクラスは、たとえば必要なすべてのセレクターを実装する必要があります。

于 2013-10-31T09:40:01.140 に答える