> For the complete documentation index, see [llms.txt](https://ryukiedev.gitbook.io/wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ryukiedev.gitbook.io/wiki/swift/open-yu-public.md).

# 22.open与public

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

### UI组件中

```swift
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

```swift
class MapNavigationController: LedgerNavigationViewController {

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

    weak var selector: LocationSelector?
}
```

## 修改

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

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

        setupUI()
    }
}
```

## 总结

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

* public
  * 只能在模块内部被继承
* open
  * 可以再其他模块被继承


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ryukiedev.gitbook.io/wiki/swift/open-yu-public.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
