【问题标题】:Is a blank function conventional in subclass that conforms to custom protocol?子类中的空白函数是否符合自定义协议?
【发布时间】:2020-09-10 14:18:38
【问题描述】:

我的应用中有两个主屏幕,目前都只是UIViewController 的子类。这两个视图控制器非常相似——它们都实现了我的UIView 的自定义子类HeaderView,它负责显示信息和接受用户输入。就目前而言,这段代码是重复的,因为两个视图控制器的HeaderView 设置是相同的——唯一的区别是当用户确认HeaderView 中的文本输入时会发生什么。

为了减少重复代码,我创建了一个名为InputViewControllerUIViewController 的子类)的类,它包含两个相同的视图控制器的方面。最终,我希望这两个视图控制器继承 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() 方法,因此将InputViewControlleronHeaderUpdate() 的定义留空是惯例还是有其他解决方案?

【问题讨论】:

    标签: ios swift xcode subclass swift-protocols


    【解决方案1】:

    InputViewController 中将onHeaderUpdate() 的定义留空是不是惯例

    是的,这就是所谓的抽象方法。通常会给它故意崩溃的代码,作为一种说法,“我的存在只是为了在子类中被覆盖。” p>

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

    【讨论】:

    • 感谢您的澄清!我很难在 Google 和 SO 上找到答案,因为我不熟悉抽象方法术语。包含此链接可能会有所帮助:stackoverflow.com/questions/24110362/…
    • 正如我现在在回答中指出的那样,执行所有子类必须实现的初始配置的基本视图控制器也是正常的。你重新发明了一个非常有用的轮子!在我的一些应用程序中,我所有的视图控制器都这样做。它们都继承并实现了抽象的配置方法来设置视图、颜色、约束等,这些都是由基本视图控制器调用的。
    • 太棒了,很高兴知道我的假设是正常的,并非完全错误。这种实现方式对于减少代码同时提高可读性非常有帮助。万事如意!
    猜你喜欢
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    相关资源
    最近更新 更多