通常,如果您希望其他类使用您的协议,则必须在头文件中声明它,如下所示:
// MyClass.h
@protocol MyProtocol;
@interface MyClass : NSObject
@end
@protocol MyProtocol
- (void) doSomething: (MyClass*) m;
@end
声明后,你应该在实现文件中实现协议的方法,它应该像这样符合协议:
// MyClass.m
@implementation MyClass <MyProtocol>
pragma mark - MyProtocol methods
- (void) doSomething: (MyClass *)m {
// method body
}
@end
完成这两个步骤后,您就可以在所需的任何课程中使用您的协议了。例如,假设我们想将数据从其他类(例如 OtherClass.h)传递给 MyClass。您应该在 OtherClass.h 中声明一个属性,以便我们可以引用 MyClass 并执行协议。像这样的:
// OtherClass.h
#import MyClass.h
@interface OtherClass : NSObject
@property (weak) id<MyProtocol> delegate;
@end
不要忘记在声明协议的地方导入头文件,否则Xcode会提示No Type or protocol named "MyProtocol"
-
id<MyProtocol> delegate; 表示您可以将任何符合MyProtocol 协议(<MyProtocol>)的对象(id)设置为OtherClass 的委托
现在您可以从 MyClass 创建一个 OtherClass 对象并将其委托属性设置为 self。像这样:
// MyClass.m
- (void)viewDidLoad() {
OtherClass *otherClass = [[OtherClass alloc] init];
otherClass.delegate = self;
}
- 可以将委托设置为 self,因为委托可以是任何对象,并且
MyClass 符合 MyProtocol。
我希望这会有所帮助。如果您想了解更多有关协议的信息,可以参考这两个网站:
Working with Protocols - Apple Documentation
Ry's Objective-C Tutorial(这个好拿)