我想要一个方法可以访问在单个类中声明的方法的子集。显然这可以通过协议(protocol)来实现。
方法子集在 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 但不是方法 bar。
以上是否正确,foo 方法是如何在某个方法中调用的?工作代码表示赞赏。
最佳答案
这是正确的。在 hp
上调用方法照常工作:
- (void) somemethod: (id<HouseProtocol>) hp
{
[hp foo];
}
请注意,如果您真的不需要该协议(protocol)(例如,如果代码非常简单并且编写协议(protocol)显然是多余的),您可以简单地使用 id
输入:
- (void) somemethod: (id) hp
{
[hp foo];
}
在这种情况下唯一的问题是编译器必须知道 -foo
存在。
从问题标题来看,让您感到困惑的是您对 hp
类型的看法。变量 - id<HouseProtocol>
不是协议(protocol),它是“实现 HouseProtocol
的东西” ”。这就是为什么您可以在 hp
上调用方法的原因通常的方式,因为它只是某种对象。
关于objective-c - 协议(protocol)作为方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11931891/