0Pricing
Swift Academy · レッスン

lazyとプロパティオブザーバー

遅延処理にはlazyな格納プロパティを使い、willSet/didSetで格納プロパティの変更を監視します。

「lazyとプロパティオブザーバー」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

概要

このレッスンでは、2つの重要な要素、つまりlazyな格納プロパティとプロパティオブザーバー(willSet/didSet)に焦点を当てます。

lazyプロパティ

lazyは、初めてアクセスされるまで生成を遅延させます。コストの高い処理や、selfが必要な場合に便利です。

struct DataLoader {
    lazy var data: [Int] = {
        print("Loading data...")
        return [1, 2, 3]
    }()
}
var loader = DataLoader()
print("before access")
print(loader.data)   // triggers initialization only now

lazyとself

クラスではlazyを使用して、初期化後にselfに依存する値へアクセスできます。

class CacheOwner {
    let name: String
    lazy var hello: String = "Hi, " + name  // uses self safely after init
    init(name: String) { self.name = name }
}
let co = CacheOwner(name: "Ada")
print(co.hello)

プロパティオブザーバー

オブザーバーは、格納プロパティの変更前後に処理を追加します。状況を把握するには、newValueとoldValueを使用します。

struct Counter {
    var value: Int = 0 {
        willSet { print("will set to", newValue) }
        didSet  { print("did set from", oldValue) }
    }
}
var c = Counter()
c.value = 5
c.value = 9

didSetで値を制限する

didSetを使用すると、代入後に値を正規化または範囲内に制限できます。

struct Score {
    var raw: Int = 0 {
        didSet {
            if raw < 0 { raw = 0 }
            if raw > 100 { raw = 100 }
        }
    }
}
var s = Score()
s.raw = 120     // clamped to 100
print(s.raw)
s.raw = -5      // clamped to 0
print(s.raw)

注記

注記:

  • lazyを使用できるのはvarの格納プロパティだけです。
  • オブザーバーは格納プロパティに適用されます。計算プロパティでは、代わりにget/setのロジックを使用します。
  • ストレージの準備が整っていない初期化中は、オブザーバーは呼び出されません。

lazyの意味

確認問題:lazyは何をするものでしょうか?

まとめ

まとめ:時間のかかる初期設定を遅延させるにはlazyを使用し、単純なルールで格納プロパティの変更に反応するにはwillSet/didSetを使用します。

よくある質問

「lazyとプロパティオブザーバー」レッスンは無料ですか?

はい。「lazyとプロパティオブザーバー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「lazyとプロパティオブザーバー」で何を学びますか?

遅延処理にはlazyな格納プロパティを使い、willSet/didSetで格納プロパティの変更を監視します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「lazyとプロパティオブザーバー」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. プロパティとサブスクリプト
  2. lazyとプロパティオブザーバー
  3. get/setによる計算プロパティ
  4. カスタムインデックス用のサブスクリプト
← Swift Academyに戻る