0

Web API にアクセスする汎用リポジトリ (パターン) を作成しようとしています。Objective-C でプロトコルがどのように機能するかを理解するのに苦労しています (インターフェイスが少し異なる c# から来ました)。

私がやろうとしているのは、ProtocolB に渡されたオブジェクトが ProtocolA 自体を実装する必要があるため、ProtocolA を別の ProtocolB のパラメーターにしてから、ProtocolA の ProtocolB アクセス メソッドの実装にすることです。私はそれについて正しく考えていますか?

これは私がこれまでに持っているものですが、動作させることができないようです - 私の論理が間違っているかもしれません:

//PGenericModel.h
@protocol PGenericModel <NSObject>
- (void)testMethod;
@end


//PGenericRepository.h
#import "PGenericModel.h"
@protocol PGenericRepository <NSObject>
@required
- (void)Get:(id<PGenericModel>*)entity;
@end


//GenericRepository.m
#import "GenericRepository.h"
@implementation GenericRepository
- (void)Get:(id<PGenericModel>*)entity
{
    //GET
    [entity testMethod] <-- this doesn't work...
}
@end
4

1 に答える 1

7

id型が既に Objective-c オブジェクトへのポインターであるため、機能していません。

したがって、署名を次のように宣言する必要があります

- (void)Get:(id<PGenericModel>)entity

そうでないid<PGenericModel>*場合、引数は Objective-C オブジェクトへのポインタへのポインタになり、具体的な値を取得しない限り、メッセージを送信できません。

于 2013-05-21T15:32:10.143 に答える