我想要一个方法来访问在单个类中声明的方法的子集。显然,这可以通过协议来实现。
方法子集在HouseProtocol中声明,而类House实现其方法。
@protocol HouseProtocol <NSObject>
-(void) foo;
@end
@interface House : NSObject <HouseProtocol>
-(void) foo;
-(void) bar;
@end
在另一个类的其他地方,使用HouseProtocol参数定义了一个方法:
-(void) somemethod:(id<HouseProtocol>)hp;
此方法应使用house的方法,但只能使用HouseProtocol中可访问的方法。含义方法foo但不是方法栏。
以上是否正确,如何在某些方法中调用foo方法?工作代码赞赏。
答案 0 :(得分:8)
这是对的。 hp
上的调用方法照常工作:
- (void) somemethod: (id<HouseProtocol>) hp
{
[hp foo];
}
请注意,如果您真的不需要协议(例如,如果代码非常简单并且编写协议会显然过度),您只需使用id
类型:
- (void) somemethod: (id) hp
{
[hp foo];
}
在这种情况下唯一的问题是编译器必须知道-foo
存在。
从问题标题判断,让您感到困惑的是您对hp
变量类型的看法 - id<HouseProtocol>
不是协议,它是“实现HouseProtocol
的东西”。这就是为什么你可以用通常的方式调用hp
上的方法,因为它只是某种对象。