22.open与public

在对自己的项目进行组件化的时候遇到这样一个问题

UI组件中

public class LedgerNavigationViewController: UINavigationController, StoryboardInitializable {
    public override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }
}

项目中(报错)

  • Cannot inherit from non-open class 'LedgerNavigationViewController' outside of its defining module

  • Overriding non-open instance method outside of its defining module

class MapNavigationController: LedgerNavigationViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    weak var selector: LocationSelector?
}

修改

根据提示,将组件库中的 public 改成 open ,就可以了。

open class LedgerNavigationViewController: UINavigationController, StoryboardInitializable {
    open override func viewDidLoad() {
        super.viewDidLoad()

        setupUI()
    }
}

总结

平时每台用到 open,这里遇到问题才很清楚get到他俩的不同,主要区别在继承的控制上。

  • public

    • 只能在模块内部被继承

  • open

    • 可以再其他模块被继承

Last updated