1. ホーム
  2. swift

[解決済み] Swiftで遅延初期化された変数を再初期化する

2023-07-20 10:41:05

質問

次のように初期化された変数があります。

lazy var aClient:Clinet = {
    var _aClient = Clinet(ClinetSession.shared())
    _aClient.delegate = self
    return _aClient
}()

問題は、ある時点で、これをリセットする必要があることです。 aClient 変数が初期化されたときに再び初期化できるように ClinetSession.shared() が変更されたときに再度初期化できるようにするためです。しかし、もし私がクラスをオプションの Clinet? に設定しようとすると、LLVMはエラーを出します。 nil . もし、コードのどこかで aClient = Clinet(ClinetSession.shared()) でリセットしても、結局は EXEC_BAD_ACCESS .

を使用する方法はありますか? lazy を使用して、自分自身をリセットすることを許可される方法はありますか?

どのように解決するのですか?

lazy は明示的に一度だけ初期化するためのものです。 あなたが採用したいモデルは、おそらく単なる初期化オンデマンドモデルでしょう。

var aClient:Client {
    if(_aClient == nil) {
        _aClient = Client(ClientSession.shared())
    }
    return _aClient!
}

var _aClient:Client?

これで、いつでも _aClientnil であれば、初期化されて返されます。 を設定することで再初期化することができる。 _aClient = nil