我正在开发一组简单的可重用代码。我创建了一个协议来对一组方法进行分组,并在运行时向用户询问数据。
我认为设置代表是强制性的。我可以通过抛出一个断言说明原因来强制开发人员在运行时设置委托吗?
这是通过使用断言来强制使用我的类的用户的好习惯吗?它有设计层面的缺陷吗?
我正在开发一组简单的可重用代码。我创建了一个协议来对一组方法进行分组,并在运行时向用户询问数据。
我认为设置代表是强制性的。我可以通过抛出一个断言说明原因来强制开发人员在运行时设置委托吗?
这是通过使用断言来强制使用我的类的用户的好习惯吗?它有设计层面的缺陷吗?
首先是“良好做法”问题:
如果方法不是可选的,请不要将它们设为可选。
不是批评,更多的是意见
initWithDelegate:
如果需要委托,请提供方法init
方法,我早就知道了。@required
您可以通过简单地将指标添加到协议中来在编译时引起警告:
@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
}
是的,我认为在应用程序中使用协议是一种很好的做法..
协议声明可以由任何类实现的方法。
以下是使用协议好的情况。