我正在尝试实现一个协议(protocol)。
我查看了文档 here虽然我认为我遗漏了一些东西,但我理解这些概念。
我正在尝试创建一个 View ,用户点击 TableView 中的文件名会触发“didSelectRowAtIndexPath”,这将反过来通知委托(delegate)用户已选择文件(在委托(delegate)中触发 didSelectFileName)并传递文件名。我已将协议(protocol)声明如下;
@protocol FileList <NSObject>
- (void)didSelectFileNameNSString *)fileName;
@end
我的问题是:
- 如何设置 'fileName' 值,以便在调用 'didSelectFileName' 时包含当前值
- 如何告诉我的代码在委托(delegate)中触发“didSelectFileName”。
Best Answer-推荐答案 strong>
您不能只向协议(protocol)发送消息(也不能设置值)。您将消息发送到符合协议(protocol)的类。
当您说一个类符合协议(protocol)时(@interface MyClass : NSObject { etc ),您可以使用符合协议(protocol)。
因此,如果我们以您的协议(protocol)为例,我们可以拥有一个可以向委托(delegate)发送消息的类:
@interface MyClass : NSObject {
id<FileList> _delegate;
}
@end
@implementation MyClass
- someMethod {
NSString *fn = @"Hello.";
[_delegate didSelectFileName:fn];
}
@end
只需确保在您的委托(delegate)中实现协议(protocol)中的方法即可。
您无需在委托(delegate)类的接口(interface)中重新定义方法。
这里有一些关于协议(protocol)的好读物:
关于objective-c - 如何将值传递给@protocol,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/6762023/
|