【发布时间】:2020-09-10 14:18:38
【问题描述】:
我的应用中有两个主屏幕,目前都只是UIViewController 的子类。这两个视图控制器非常相似——它们都实现了我的UIView 的自定义子类HeaderView,它负责显示信息和接受用户输入。就目前而言,这段代码是重复的,因为两个视图控制器的HeaderView 设置是相同的——唯一的区别是当用户确认HeaderView 中的文本输入时会发生什么。
为了减少重复代码,我创建了一个名为InputViewController(UIViewController 的子类)的类,它包含两个相同的视图控制器的方面。最终,我希望这两个视图控制器继承 InputViewController 而不是 UIViewController。
class InputViewController: UIViewController, InputProtocol {
private let headerView = HeaderView()
override func viewDidLoad() {
super.viewDidLoad()
// layout, etc.
setupCallbacks()
}
internal func setupCallbacks() {
headerView.onUpdate = { (text: String) in
// called when user confirms text entry in headerView
self.onHeaderUpdate()
}
}
internal func onHeaderUpdate() {} // Blank function
}
setupCallbacks() 和onHeaderUpdate() 是在InputViewController 符合的协议中定义的方法。 HeaderView 实现了一个回调闭包,在 setupCallbacks() 中由 headerView.onUpdate... 处理
InputViewController遵循的协议:
protocol InputProtocol {
func setupCallbacks()
func onHeaderUpdate()
}
由于我希望InputViewController 的子类覆盖onHeaderUpdate() 方法,因此将InputViewController 中onHeaderUpdate() 的定义留空是惯例还是有其他解决方案?
【问题讨论】:
标签: ios swift xcode subclass swift-protocols