2013-05-21 134 views
0

我想创建一个访问我的web api的通用存储库(模式)。我无法理解协议如何在objective-c中工作(我来自c#,其中接口有点不同)。Objective-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 
+1

即使你来自C#,请不要在Obj-C中使用C#命名约定。例如,所有方法名称应以小写字母开头并描述它们的参数,例如, 'getForEntity:' – Sulthan

+0

@苏丹指出,谢谢! – crizzwald

回答

6

它不工作,因为id类型已经是po inter到一个Objective-c对象。

所以,你应该声明的签名

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

id<PGenericModel>*,否则参数将是一个指针的指针到一个Objective-C的对象,你不能将消息发送到它,除非你得到的具体价值。

+0

ahhhhh。谢谢。 ::脸掌:: – crizzwald