0

我正在尝试创建一个访问我的 web api 的通用存储库(模式)。我无法理解协议在objective-c 中的工作方式(我来自c#,接口有点不同)。

我想要做的是让 ProtocolA 成为另一个 ProtocolB 中的参数,然后在 ProtocolA 上实现 ProtocolB 访问方法,因为传递给 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
4

1 回答 1

7

它不起作用,因为id类型已经是指向 Objective-c 对象的指针。

所以你应该将签名声明为

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

not id<PGenericModel>*,否则参数将是指向 Objective-C 对象的指针的指针,除非获得具体值,否则无法向其发送消息。

于 2013-05-21T15:32:10.143 回答