我是Objective C的新手。我正在尝试使用协议,因为我会使用Java中的接口,但我不知道它是如何,甚至是否适合这项工作。我在Protocol.h中定义了一个协议:
@protocol SomeProtocol
- (void)someMethod;
@end
现在,在另一个类中,我需要一个具有someMethod
的变量#import "Protocol.h"
@interface OtherClass:NSObject {
SomeProtocol objWithSomeMethod;
}
@end
当然“SomeProtocol objWithSomeMethod”给了我一个错误。那么有没有办法声明一个对象,无论其类型如何,都符合这个协议?
答案 0 :(得分:4)
是的,请使用尖括号。您可以声明一个实例变量以符合这样的协议:
id<SomeProtocol> objWithSomeMethod;
如果您希望它符合多个协议,请使用逗号分隔它们:
id<SomeProtocol, SomeOtherProtocol> objWithSomeMethod;
您也可以用相同的方式声明变量或参数。
答案 1 :(得分:4)
尖括号将对象限定为实现协议。在您的示例中,写下
#import "Protocol.h"
@interface OtherClass : NSObject {
id<SomeProtocol> objWithSomeMethod;
}
@end
如果要声明类实现接口,则使用相同的表示法,基本上:
@interface MyProtocolClass : NSObject <SomeProtocol> {
// ...
}
@end
答案 2 :(得分:-1)
你应该用他的类型声明你的实例变量,然后是&lt;&gt;里面的协议列表。最后是变量名。所以在你的情况下,它将是:
#import "Protocol.h"
@interface OtherClass:NSObject {
id <SomeProtocol> objWithSomeMethod;
}
@end