32

Swiftの遅延変数は複数回計算されますか? 私は彼らが次のものを置き換えたという印象を受けました:

if (instanceVariable) {
    return instanceVariable;
}

// set up variable that has not been initialized

Objective-C のパラダイム (遅延インスタンス化)。

それが彼らの仕事ですか?基本的に、アプリが最初に変数を要求したときに一度だけ呼び出され、計算されたものを返すだけですか?

それとも、通常の計算されたプロパティのように毎回呼び出されますか?

私が尋ねる理由は、基本的に、他のインスタンス変数にアクセスできる Swift の計算されたプロパティが必要だからです。「fullName」という変数があり、それが単に連結されfirstNamelastName. Swiftでそれを行うにはどうすればよいですか? 通常の計算された変数(非遅延)では他のインスタンス変数にアクセスできないため、遅延変数が唯一の方法であるようです。

だから基本的に:

Swiftの遅延変数は複数回呼び出されますか? その場合、インスタンス変数にアクセスできる計算変数を作成するにはどうすればよいですか? そうでない場合、パフォーマンス上の理由から変数を 1 回だけ計算したい場合は、どうすればよいですか?

4

4 に答える 4

7

いいえ、遅延プロパティは一度だけ初期化されます。新しい値を設定するか、(オプションのプロパティの場合) nil にリセットすると、遅延初期化子は再度呼び出されません。

必要なのは計算されたプロパティだと思います-保存されたプロパティに支えられていないため、初期化には関与しないため、他のインスタンスプロパティを参照できます。

「通常の計算された変数 (非遅延) では他のインスタンス変数にアクセスできない」と言うのはなぜですか?

于 2014-10-19T20:09:58.167 に答える