Протокол Objective C как параметр в другом протоколе

Я пытаюсь создать общий репозиторий (шаблон), который обращается к моему веб-API. У меня возникают проблемы с пониманием того, как протоколы работают в target-c (я пришел из C#, где интерфейсы немного отличаются).

Я пытаюсь сделать так, чтобы ProtocolA был параметром в другом ProtocolB, а затем при реализации методов доступа ProtocolB к ProtocolA, поскольку объект, передаваемый в ProtocolB, должен реализовывать сам ProtocolA. Я правильно об этом думаю?

Это то, что я имею до сих пор, но не могу заставить его работать - возможно, моя логика неверна:

//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

1 ответ

Это не работает, потому что id тип уже является указателем на объект Objective-c.

Таким образом, вы должны объявить подпись как

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

не id<PGenericModel>*в противном случае аргумент будет указателем на указатель на объект Objective-C, вы не можете отправлять ему сообщения, пока не получите конкретное значение.

Другие вопросы по тегам