2011-06-28 56 views
2

我是新来的Objective C.我试图使用一个协议,因为我会在Java中使用一个接口,但是我不知道如何或者甚至是否是正确的工具。我在Protocol.h定义的协议:我可以在Objective-C中将协议作为类变量吗?

@protocol SomeProtocol 
- (void)someMethod; 
@end 

现在,在另一个类,我需要一直的someMethod

#import "Protocol.h" 
@interface OtherClass:NSObject { 
    SomeProtocol objWithSomeMethod; 
} 
@end 

当然“SomeProtocol objWithSomeMethod”给我一个错误的变量。那么有没有办法来声明一个对象,不管类型如何,都符合这个协议?

回答

4

是的,使用尖括号。你可以声明一个实例变量,以符合这样的协议:

id<SomeProtocol> objWithSomeMethod; 

如果你想让它符合不止一个协议,你用逗号将它们像这样分离:

id<SomeProtocol, SomeOtherProtocol> objWithSomeMethod; 

你也可以用相同的方式声明变量或参数。

4

尖括号将对象限定为实施协议。在你的榜样,写

#import "Protocol.h" 
@interface OtherClass : NSObject { 
    id<SomeProtocol> objWithSomeMethod; 
} 
@end 

如果要声明一个类实现一个接口,可以使用相同的符号,主要有:

@interface MyProtocolClass : NSObject <SomeProtocol> { 
    // ... 
} 
@end 
-1

你应该和他的类型声明的实例变量,然后<>中的协议列表,最后是变量名称。所以在你的情况下,它会是:

#import "Protocol.h" 
@interface OtherClass:NSObject { 
    id <SomeProtocol> objWithSomeMethod; 
} 
@end 
相关问题