因此,我正在編寫一個Swift框架,我只想通過公開一些對象。在swift中使用內部類實現公共協議
如:
public protocol Thing : class {
var x : Int { get }
}
我想隱藏我的實現細節,所以我做出internal
類:通過工廠方法
internal class ThingImpl : Thing {
public private(set) var x : Int = 0
}
而鬻出新Things
:
public func newThing() -> Thing {
return ThingImpl()
}
我不明白爲什麼編譯器會提醒我關於創建var x
public
在ThingImpl
之內,並鼓勵我聲明它是內部的。
不顧一切警告運行正常,如果我聽從警告並切換到internal private(set) var x : Int = 0
警告消失,事情仍然運行良好。
在我看來,製作var是正確的,因爲它在公共協議中是公開的。 我在這裏錯過了什麼嗎?謝謝。
但它是憑藉Thing協議公開的嗎? –
如果您通過Thing協議訪問它,它是公開的。但是你不能通過其他模塊的'ThingImpl'來訪問'x'。我的意思是,兩個案件不相關 – t4nhpt
是的,我猜這是他們沒有關係,我覺得很難接受。我的意思是,ThingImpl被宣佈確認Thing(這是公開的),因此它必須有一個公共變量x:Int {get}。哎呀! :) –