Links
Comment on page

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
    • 可以再其他模块被继承