子类中是否有符合自定义协议的常规空白函数?
Is a blank function conventional in subclass that conforms to custom protocol?
我的应用程序中有两个主屏幕,目前都是 UIViewController
的子class。这两个视图控制器非常相似——它们都实现了我的 UIView
的自定义子 class,称为 HeaderView
,它负责显示信息和接受用户输入。就目前而言,此代码是重复的,因为两个视图控制器的 HeaderView
设置相同 - 唯一的区别是当用户确认 HeaderView
.
中的文本输入时发生的情况。
为了减少重复代码,我正在创建一个名为 InputViewController
的 class(UIViewController
的子class),它包含两个视图的各个方面相同的控制器。最终,我希望两个视图控制器 subclass 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
实现了一个由 headerView.onUpdate...
在 setupCallbacks()
中处理的回调闭包
InputViewController
符合的协议:
protocol InputProtocol {
func setupCallbacks()
func onHeaderUpdate()
}
为了说明这一点,我画了一张图;
由于我想让InputViewController
的子class重写onHeaderUpdate()
方法,所以把onHeaderUpdate()
的定义留在[=17=中是不是很常规? ] 空白还是有其他解决方案?
is it conventional to leave the definition of onHeaderUpdate()
in InputViewController
blank
是的,这叫做 抽象方法。 故意给它代码崩溃是很常见的,就像在说,“我的存在只是为了在一个子类。”
(我应该更进一步说,你正在创建的是一个基本视图控制器,它执行所有子类必须实现的初始配置,这也是正常的。)
我的应用程序中有两个主屏幕,目前都是 UIViewController
的子class。这两个视图控制器非常相似——它们都实现了我的 UIView
的自定义子 class,称为 HeaderView
,它负责显示信息和接受用户输入。就目前而言,此代码是重复的,因为两个视图控制器的 HeaderView
设置相同 - 唯一的区别是当用户确认 HeaderView
.
为了减少重复代码,我正在创建一个名为 InputViewController
的 class(UIViewController
的子class),它包含两个视图的各个方面相同的控制器。最终,我希望两个视图控制器 subclass 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
实现了一个由 headerView.onUpdate...
setupCallbacks()
中处理的回调闭包
InputViewController
符合的协议:
protocol InputProtocol {
func setupCallbacks()
func onHeaderUpdate()
}
为了说明这一点,我画了一张图;
由于我想让InputViewController
的子class重写onHeaderUpdate()
方法,所以把onHeaderUpdate()
的定义留在[=17=中是不是很常规? ] 空白还是有其他解决方案?
is it conventional to leave the definition of
onHeaderUpdate()
inInputViewController
blank
是的,这叫做 抽象方法。 故意给它代码崩溃是很常见的,就像在说,“我的存在只是为了在一个子类。”
(我应该更进一步说,你正在创建的是一个基本视图控制器,它执行所有子类必须实现的初始配置,这也是正常的。)