SwiftData を使うときに出てくる、こんなコード👇
let schema = Schema([DiaryEntry.self])
「.self って何?」「インスタンスじゃダメなの?」と思った人はいませんか?
今日はこの 型オブジェクト の意味を、例えを交えながら解説します。
1. まずは普通のインスタンス
let entry = DiaryEntry(fact: "事実", interpretation: "解釈", date: Date())
entryは DiaryEntry 型のインスタンスです。- 中に「事実・解釈・日付」のデータを持っている「実体」ですね。
👉 イメージ:
これは「日記の1ページ」に実際に文字が書かれている状態。
2. DiaryEntry.self は何者?
let typeRef = DiaryEntry.self
DiaryEntry.selfは DiaryEntry という型そのものを値として扱ったものです。- つまり「設計図」を指しているイメージ。
- この場合、
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 は「設計図を指し示すためのキーワード」だったのです。

コメント