由于如果协议来自不同的模块或超类,视图编码的方法是内部的或公共的,所以总是有机会从外部调用其中一些方法,这意味着缺乏封装。考虑到 SOLID,永远不应该有一种方法可以在范围之外触发直接的 UI 更改。
public protocol ViewCodeProtocol {
func buildViewHierarchy()
func setupConstraints()
func configureViews()
}
public extension ViewCodeProtocol {
func applyViewCode() {
buildViewHierarchy()
setupConstraints()
configureViews()
}
func configureViews() { }
}
幸运的是,对此有一个简单的转变,我们仍然依赖超类来定义一些可覆盖的行为。
为您的视图创建一个基类
首先,让我们记录一下我们过去是如何创建管道的。我们有三种方法:一种用于构建层次结构,第二种用于约束,第三种用于附加配置。我们希望在不同的地方定义或查看数据,并在初始化视图后触发管道。让我们创建一个新的基类,我们将在其中将所有任务集中在一个初始化程序中:
public class BaseView: UIView {
public override init(frame: CGRect) {
super.init(frame: frame)