我正在开发一组简单的可重用代码。我创建了一个协议(protocol)来对一组方法进行分组,并在运行时向用户询问数据。
我认为设置委托(delegate)是强制性的。我可以通过抛出一个说明原因的断言来强制开发人员在运行时设置委托(delegate)吗?
这是通过使用断言来强制使用我的类的好习惯吗?它是否存在设计层面的缺陷?
最佳答案
首先是“良好做法”问题:
- 不要让方法成为必需,除非它们确实是必需的。
如果方法不是可选的,不要将它们设为可选。
不是批评,更多的是意见
- 提供一个方法
initWithDelegate:
如果委托(delegate)是必需的 - 我经常遇到这样的数据结构,在我调查之前我不知道有委托(delegate)模式。通过特定的
init
方法,我更早地意识到了这一点。
- 提供一个方法
您可以通过简单地将 @required
指示符添加到您的协议(protocol)中来在编译时引起警告:
@protocol SuperAwesomeProtocol <NSObject>
@required
-(void) requiredMethod1;
-(void) requiredMethod2;
@optional
-(void) optionalMethod1;
-(void) optionalMethod2;
@end
//and making your delegate specific:
@property (nonatomic, assign) id<SuperAwesomeProtocol> delegate;
您仍然可以通过以下方式引发运行时断言:
if (!delegate || ![delegate respondsToSelector:@selector(requiredMethod1)])
{
//Assertion failure
}
关于objective-c - 强制开发人员遵守 Objective-C 中的协议(protocol)是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587120/