DSBaseViewController
是什么
'DS' 前缀代表数据状态(Data State),也代表我的团队名称 Dragon Source。DSBaseViewController 为 UIViewController 的子类提供了方便,以维护子视图的构建和数据源管理,它通过重写 UIViewController 的方法扩展了一个核心协议,对于符合协议的子类,将会得到美丽的魔力。
为什么
我看到了很多开发者在他们的项目中写了一些有趣的代码,例如,为视图控制器构建一系列子视图,为视图控制器加载数据(从网络),常见的解决方案是创建一些如 - (void)configUI
、- (void)loadData
的方法,并在 viewDidLoad
中调用它们。这对于一个示例项目来说是可以的,但对我来说,这不是团队项目。
长期考虑团队项目的维护,假设有几个开发者在项目中一起工作,每个人都有他自己的命名规则。会有很多方法为视图控制器构建子视图,比如 - (void)configUI
、- (void)setupUI
、- (void)buildSubviews
等。这是很可怕的!这是一个没有规则的世界。
如何
以DSBaseViewController类为父类,通过协议BuildViewDelegate外部声明了UIViewController的原生方法。
- (void)buildSubview:(UIView *)containerView controller:(DSBaseViewController *)viewController
用于为视图控制器构建子视图。
- (void)loadDataForController:(DSBaseViewController *)viewController
用于加载视图控制器的数据。
- (void)tearDown:(DSBaseViewController *)viewController
用于卸载视图控制器的数据。
- (BOOL)shouldInvalidateDataForController:(DSBaseViewController *)viewController
用于标记数据有效状态以加载视图控制器的数据。
所有这些代理方法都将自动在视图控制器的生命周期中调用。从技术上来说,它们不应当在子类视图控制器的内部实现中直接调用。这是上帝,规则!
然而,这还不是编写漂亮代码(结构)的完美方式。我们需要更多的命名规则,更多的道德。
- 使用
#pragma mark -
为委托、公共方法、私有方法、类开始部分标记。 - 强制执行
#pragma mark -
的顺序,比如这样。 - 使用前缀'_'定义私有方法,如"_refreshDataForView:"。
示例
要运行示例项目,首先将仓库克隆,然后从示例目录运行pod install
。
安装
DSBaseViewController可以通过CocoaPods获得。要安装它,只需将以下行添加到您的Podfile中
pod "DSBaseViewController"
作者
授权
DSBaseViewController可在MIT授权下使用。有关更多信息,请参阅LICENSE文件。