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
Was this helpful?