Swift の DiaryEntry.self ってなに?──型とインスタンスの違いを解説


SwiftData を使うときに出てくる、こんなコード👇

let schema = Schema([DiaryEntry.self])

.self って何?」「インスタンスじゃダメなの?」と思った人はいませんか?
今日はこの 型オブジェクト の意味を、例えを交えながら解説します。


1. まずは普通のインスタンス

let entry = DiaryEntry(fact: "事実", interpretation: "解釈", date: Date())
  • entryDiaryEntry 型のインスタンスです。
  • 中に「事実・解釈・日付」のデータを持っている「実体」ですね。

👉 イメージ:
これは「日記の1ページ」に実際に文字が書かれている状態。


2. DiaryEntry.self は何者?

let typeRef = DiaryEntry.self
  • DiaryEntry.selfDiaryEntry という型そのものを値として扱ったものです。
  • つまり「設計図」を指しているイメージ。
  • この場合、typeRef の型は DiaryEntry.Type になります。

👉 イメージ:
これは「日記のテンプレート(まだ書かれていないフォーマット)」を指す。


3. Schema に渡すときの意味

let schema = Schema([DiaryEntry.self])

SwiftData が知りたいのは「どんなデータ形式を保存するか?」です。

  • インスタンス(書き終わった日記1ページ)を渡しても意味がありません。
  • 必要なのは「日記のテンプレート」。

だから DiaryEntry.self = 型そのものを渡すんです。
これで SwiftData に「このテンプレートを使うデータを保存できるようにしてね」と伝わります。


4. 図で整理してみる

DiaryEntry設計図

   ├── .self型そのものを値として参照

   └── ( ... )    ← インスタンス設計図から作った実体
  • .self → 設計図をそのまま渡す
  • ( ... ) → 設計図から家(実体)を建てる

5. 日常の比喩

  • 型 (DiaryEntry.self) → 日記のフォーマット(罫線だけのノート)
  • インスタンス (DiaryEntry(...)) → 実際に文字が書かれた日記の1ページ

SwiftData は「どんなフォーマットの日記を保存するの?」と聞いているので、答えとして渡すのは「フォーマット(型)」の方です。


まとめ

  • DiaryEntry(...)インスタンス(実際のデータ)
  • DiaryEntry.self型オブジェクト(設計図そのもの)
  • Schema([DiaryEntry.self]) は「この型を保存対象にしますよ」という宣言

👉 .self は「設計図を指し示すためのキーワード」だったのです。



コメント

タイトルとURLをコピーしました