公開日:2025-08-23
カテゴリー:Swift解説
タグ:Swift, SwiftUI, some Scene, Opaque Return Type
📝 some Scene とは?
SwiftUI アプリのエントリーポイントはこう書きます👇
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
ここで出てくる var body: some Scene の意味は、
👉 「具体的な型は隠すけど、必ず Scene に準拠したものを返す」
ということです。
実際に返しているのは WindowGroup 型ですが、外からは「Sceneとして振る舞う」としか見えません。
🔍 なぜ「some」で型を隠すのか?
1. シンプルに使える
利用する側は「Sceneを返す」と分かれば十分。
中身が WindowGroup なのか Settings なのかは意識しなくてもOKです。
2. 実装を変えても安全
今は WindowGroup を返していても、将来 Settings に差し替えても外部コードは壊れません。
👉 APIの柔軟性が高まります。
3. 高速で型安全
var body: Sceneとすると「どんな型が返るか分からない箱(プロトコル型)」扱い。実行時に解決される。var body: some Sceneは コンパイル時に具体型が確定。
👉 オーバーヘッドがなく、高速で安全です。
🎯 some Scene と Scene の違い
| 書き方 | 実際の中身 | 決まるタイミング | 特徴 |
|---|---|---|---|
var body: some Scene | 単一の具体型(例: WindowGroup) | コンパイル時 | 高速・型安全・外部に中身を隠せる |
var body: Scene | どの Scene か分からない箱 | 実行時 | 柔軟だが遅く、型安全性も下がる |
💡 some Scene とジェネリクスの違い
- 共通点:どちらも「具体型を隠す」仕組み。
- 違い:
someは 戻り値側の具体型を隠す- ジェネリクスは 呼び出し側に型パラメータを見せる
👉 API設計で「内部は柔軟に変えたいけど、外にはシンプルに見せたい」ときに便利。
✅ まとめ
some Sceneは 不透明な戻り値の型(Opaque Return Type)- 中身は
WindowGroupなど具体型だが、外には「Sceneを返す」ことしか伝えない - メリットは シンプル・安全・高速
some Viewと同じ仕組みで、SwiftUI の基本設計になっている

コメント