0
我在協議擴展中創建了一個私有變量,並使用它來獲取對象的一個實例。在協議中調用的屬性getter被調用的次數超過所需的次數
即使我打過一次電話,該吸氣劑被調用兩次。我準備了一個遊樂場來表明這一點。
下面是代碼:
class LoggingService {
func sayWorld() {
print("world")
}
}
protocol LoggerType {
func sayWorld()
}
extension LoggerType {
private var loggerInstance: LoggingService {
print("init")
return LoggingService()
}
func sayWorld() {
self.loggerInstance.sayWorld()
}
}
class ViewMock: LoggerType {
init() {
}
}
let viewObj = ViewMock()
viewObj.sayWorld()
看一看運行操場
需要一些解釋到這種行爲。
調試怪異的第一步操場上的Swift行爲不使用操場。在編譯的項目中,只能按預期訪問一次getter。 – Hamish
@哈米什謝謝你的迴應。事實確實如此。我不知道蘋果爲什麼會這麼做。 – kerry
如果我不得不猜測,我會說這是因爲遊樂場正在執行'loggedInstance'一段時間,以便在右邊的邊欄中顯示它的描述。您可以將其更改爲'_ = self.loggerInstance.sayWorld()',以便側欄顯示錶達式的無效結果,您將看到它只被調用一次。 – dan