objective-c - 强制开发人员遵守 Objective-C 中的协议(protocol)是一种好习惯吗?

标签 objective-c

我正在开发一组简单的可重用代码。我创建了一个协议(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/

相关文章:

objective-c - 如何确保 UIButton 的文本不被缩短?

objective-c - Pod 安装后 Pod/标题为空

objective-c - CVMetalTextureCacheCreateTextureFromImage 在 macOS 10.13 上返回 -6660

objective-c - 检查条件不起作用并返回无法识别的选择器

ios - 使用 GPUImage 库的高斯模糊

objective-c - 我应该从 CGImageSourceCopyPropertiesAtIndex 调用中释放返回对象吗?

iphone - SFHFKeychainUtilsErrorDomain 错误 -2000

objective-c - 获取日期与 [NSDate date] 相差几个小时

objective-c - 什么是私有(private) API

objective-c - 无法在 UICollectionView 单元格上创建底部边框