0
私はプロトコル拡張でプライベート変数を作成し、それを使ってオブジェクトのインスタンスを取得しました。計算されたプロパティのゲッターが必要以上に呼び出されました
私がそれを一度呼び出すとしても、ゲッターは2回呼び出されます。私はそれを示すためにプレイグラウンドを用意しました。
以下はコードです:
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()
は、この動作にいくつかの説明が必要で実行遊び場
を見てください。
遊び場で奇妙なスウィフト動作をデバッグするステップ1は、遊び場を使用していません。コンパイルされたプロジェクトでは、ゲッターは期待どおりに1回しかアクセスされません。 – Hamish
@Hamishは応答に感謝します。それは確かに事実でした。なぜAppleがそのようなことをするのか分かりません。 – kerry
私が推測しなければならないのは、右側のサイドバーにその説明を表示するために、プレイグラウンドが 'loggedInstance'をさらに実行しているからです。サイドバーが式の空白の結果を代わりに表示するように '_ = self.loggerInstance.sayWorld()'に変更することができ、それは一度だけ呼び出されることがわかります。 – dan