
Swiftで配列やコレクションを扱うときに便利なのが .first プロパティです。
「先頭の要素だけを取り出したい」という場面はとてもよくありますが、.first を使えば非常にシンプルに書けます。
この記事では .first の基本的な意味や使い方、活用時の注意点までわかりやすく解説します。
.first とは?
.first は、配列(Array)やセット(Set)などのコレクションの「最初の要素」を返すプロパティです。
要素が存在する場合はその値を、存在しない場合は nil を返します。
つまり、Optional型(オプショナル型)として結果が返ってくるのが特徴です。
具体例:配列の先頭要素を取り出す
例えば、配列の中で最初の要素だけを使いたい場合、以下のように書けます。
|
1 2 3 4 5 6 7 |
let fruits = ["りんご", "バナナ", "みかん"] if let firstFruit = fruits.first { print("最初の果物は \(firstFruit) です") } else { print("配列は空です") } |
このコードでは、fruits.first によって「りんご」が取り出され、firstFruit に代入されます。
もし配列が空なら nil になるので、if let で安全にアンラップして使っています。
Optional型で返ってくる理由
.first の戻り値が Optional なのは、空の配列やコレクションでもクラッシュを防ぐためです。
たとえばこのようなケース:
|
1 2 3 |
let emptyList: [Int] = [] print(emptyList.first) // nil |
この場合の結果は nil です。
このように、空の配列に対して .first を呼び出してもエラーにはなりません。
この挙動により、予期せぬクラッシュを防ぎやすくなっています。
活用シーン
.first は様々な場面で役立ちます。
特に、次のようなケースでは非常に便利です。
1. フィルタ結果の中から先頭の1件だけ使いたいとき
|
1 2 3 4 5 |
let numbers = [1, 2, 3, 4, 5] if let evenNumber = numbers.first(where: { $0 % 2 == 0 }) { print("最初の偶数は \(evenNumber)") } |
first(where:) を使えば「特定条件を満たす最初の要素」を取得できます。
first(where:) は、最初にマッチした要素で探索を停止するため、コレクション全体を走査しません。
filter はすべての要素を評価してから結果を作るのに対し、first(where:) は見つかった時点で処理を終えるため、よりパフォーマンスに優れています。
2. Viewで最初のデータだけを表示したいとき
|
1 2 3 |
let items = ["A", "B", "C"] Text(items.first ?? "データなし") |
nil チェックしつつ表示に使えるので便利です。
3. APIのレスポンスから先頭のレコードだけ使いたいとき
|
1 2 3 4 5 6 7 8 |
struct User: Decodable { let name: String } let users: [User] = fetchUsersFromAPI() if let firstUser = users.first { print("最初のユーザーは \(firstUser.name)") } |
.first はよく使われます。
4. SwiftDataやCoreDataで1件の設定モデルを取得するとき
アプリの設定データやユーザープロファイルなど、常に1レコードだけ存在するデータモデルを扱う場合にも .first は非常に有効です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
@Model final class AppSettings { var theme: String var isDarkMode: Bool init(theme: String, isDarkMode: Bool) { self.theme = theme self.isDarkMode = isDarkMode } } // SwiftDataでfetchする例 @Environment(\.modelContext) private var context func loadSettings() { let descriptor = FetchDescriptor<AppSettings>() if let settings = try? context.fetch(descriptor).first { print("現在のテーマ: \(settings.theme)") print("ダークモード: \(settings.isDarkMode)") } else { print("設定データが存在しません") } } |
このように、常に1件だけ存在する設定情報を取得するときは、fetch() の結果配列から .first を使って取り出すのが一般的です。
アプリ開発では、「設定テーブル」「ユーザー情報」などのデータを取得する時に、このパターンが頻出します。
注意点
.first を使う際には、次のようなポイントに注意しましょう。
- オプショナルで返ってくるので、必ず
nilチェックするか、?? でデフォルト値を用意する- 例:
let value = list.first ?? "なし"
- 例:
- 順序が保証されないコレクション(Setなど)では期待通りの順序で取得できない場合がある
- Setは順序を持たないため、
.firstの結果が毎回異なることもあります
- Setは順序を持たないため、
順序を意識する必要がある場合は、配列(Array)で扱うのが基本です。
まとめ
今回は Swift の .first について詳しく解説しました。
.firstはコレクションの最初の要素を返すプロパティ(Optional型)- 空のコレクションでもクラッシュせず、
nilを返して安全 - フィルタ条件付きの
first(where:)も非常に便利 - Setなど順序が不定なコレクションでは挙動に注意
「配列の最初の要素だけ使いたい」と思ったら、まず .first を使ってみるのが基本です。
使い方に慣れることで、コードがすっきり読みやすくなりますよ!

