我有一堂課:
internal class A {
}
我還有一堂課:
open class B: A {
}
我真的需要B是open的,但為了使該代碼編譯,我必須做出A開放,但做A open也使得它public,我不希望出現這種情況。
你覺得有什么辦法可以做一個班級internal open嗎?
uj5u.com熱心網友回復:
這可能是您最接近您想要的:
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()
不幸的是,似乎沒有辦法讓initinB繼承,因為它必須在A. 但是您也不能將initin標記A為@available(*, unavailable),否則它也無法使用B。
uj5u.com熱心網友回復:
不,你不能,Swift 不支持這種情況。
該語言的設計涉及使其他可覆寫的宣告在另一個模塊中A可見,B而無需明確重新定義它們。A如果它們要可見,則它們需要公開可見/可覆寫B,因此整個類必須可見/可覆寫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314602.html
上一篇:反應-如果乘以一條線
