使 class 打开,但内部

Make a class open, but internal

我有一个 class:

internal class A {

}

我还有一个class:

open class B: A {

}

我真的需要 B 变成 open,但是为了编译这段代码,我必须打开 A,但是让 A open 也成为 public 但我不想要那样。

你觉得有什么方法可以制作classinternal open吗?

不可以,Swift不支持这种场景。

语言的设计涉及使 A 中的其他可覆盖声明在另一个模块的 B 中可见,而无需显式重新定义它们。如果它们要在 B 上可见,它们需要在 A 上公开 visible/overrideable,因此整个 class 必须是 visible/overridable。

这可能是最接近您想要的:

open class A {
    public let message: String

    fileprivate init(message: String) {
        self.message = message
    }
}

open class B: A {
    public override init(message: String) {
        super.init(message: message)
    }

    public func printMessage() {
        print(message)
    }
}

用法:

let b = B(message: "Hello world!")
b.printMessage()

不幸的是,似乎没有办法让 B 中的 init 继承,因为它必须在 A 中。但是也不能把A中的init标记为@available(*, unavailable),否则B也无法使用。