子类中是否有符合自定义协议的常规空白函数?

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

是的,这叫做 抽象方法。 故意给它代码崩溃是很常见的,就像在说,“我的存在只是为了在一个子类。”

(我应该更进一步说,你正在创建的是一个基本视图控制器,它执行所有子类必须实现的初始配置,这也是正常的。)