我正在尝试实现一个协议(protocol)。
我查看了文档 here我理解这些概念,尽管我认为我遗漏了一些东西。
我正在尝试创建一个 View ,用户点击 TableView 中的文件名,触发“didSelectRowAtIndexPath”,这将通知委托(delegate)用户已选择一个文件(在委托(delegate)中触发 didSelectFileName)并传递文件名。我已声明协议(protocol)如下;
@protocol FileList <NSObject>
- (void)didSelectFileName:(NSString *)fileName;
@end
我的问题是:
- 如何设置“fileName”值,以便在调用“didSelectFileName”时它包含当前值
- 如何告诉我的代码触发委托(delegate)中的“didSelectFileName”。
最佳答案
您不能只向协议(protocol)发送消息(也不能设置值)。您将消息发送到符合协议(protocol)的类。
当您说一个类符合协议(protocol)( @interface MyClass : NSObject <MyProtocol> { 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/