我注意到在iPhone开发工具包中定义的几个协议中标记为可选的方法,例如UIActionSheetDelegate协议。
我如何定义自己的协议,并将一些方法设置为可选的?
发布于 2008-11-26 23:21:35
在“Formal Protocols”的苹果主页上:
可选协议方法可以使用@optional关键字标记为可选。对应于@optional模式关键字,有一个@required关键字正式表示默认行为的语义。您可以使用@optional和@required将协议划分为您认为合适的部分。如果不指定任何关键字,则默认为@required。
@protocol MyProtocol
- (void)requiredMethod;
@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;
@required
- (void)anotherRequiredMethod;
@end发布于 2014-09-03 22:52:05
如果协议中的方法被标记为可选,则在尝试调用该方法之前,必须检查对象是否实现了该方法。
例如,饼图视图可能会测试段标题方法,如下所示:
NSString *thisSegmentTitle;
if ([self.dataSource respondsToSelector:@selector(titleForSegmentAtIndex:)]) {
thisSegmentTitle = [self.dataSource titleForSegmentAtIndex:index];
}respondsToSelector:方法使用选择器,它引用编译后的方法的标识符。您可以通过使用@selector()指令并指定方法的名称来提供正确的标识符。
如果本例中的数据源实现了该方法,则使用title;否则,title保持为空。
发布于 2015-05-28 21:36:05
协议是一组规则。我们可以创建如下示例的协议:
TestProtocols.h
@protocol TestProtocols <NSObject>
@optional
-(void)testMethodOptional;
@required // by default
-(void)testMethodRequired;
@end实施:
测试类.h
#import "TestProtocols.h"
@interface TestClass : NSObject <TestProtocols>
@end测试类.m
#import "TestClass.h"
@implemenation TestClass
//optional to implement
-(void)testMethodOptional{
// Your Code
}
//required to implement
-(void)testMethodRequired{
// Your Code
}
@endhttps://stackoverflow.com/questions/322498
复制相似问题