我一直在瀏覽swift文檔,並通過封裝的一些示例進行研究,並且不確定我看到的行爲。我已經在堆棧中尋找類似的問題,查看文檔並查看一些教程(請參閱下面的鏈接),雖然這是一個小問題無法找到答案(可能是因爲Swift已更改?)Swift 3從擴展中訪問結構中的私有屬性
創建代表隊列一個簡單的結構:
struct Queue<Element> {
private var elements = [Element]()
mutating func enqueue(newElement: Element) {
elements.append(newElement)
}
mutating func dequeue() -> Element? {
guard !elements.isEmpty else {
return nil
}
return elements.remove(at: 0)
}
}
後來被擴展:
extension Queue {
func peek() -> Element? {
return elements.first
}
}
,但當然元素是不可訪問,由於私人保護級別。 它通過改變元素訪問fileprivate的工作 - 但爲什麼?
我的理解是擴展是封閉類型的一部分,並期待似乎是用於這樣的工作方式https://www.andrewcbancroft.com/2015/04/22/3-nuances-of-swift-extensions/
所以是我的知名度理解錯了,或者已經斯威夫特改變了網絡上?
應該刪除參數名稱,如'newElement',不任何有意義的信息添加到呼叫現場 – Alexander
而且,你可能想要實現一個隊列作爲循環緩衝區。從陣列開始移除代價很高。 – Alexander
好吧,雖然這只是一個小例子來說明問題。 – stevenpcurtis