✍️

【Swift】enumをCaseIterableに準拠させて、enumの全要素を取得

2023/04/03に公開

はじめに

この記事の主張

enumの全要素を取得するには、以下2つが必要

  1. enumをCaseIterableに準拠させる
  2. allCasesタイププロパティを使用する

本題

完成系

import SwiftUI

enum Feelings: String, CaseIterable {
    
    case bad = "😢"
    case soso = "🙂"
    case good = "😊"
    
    var id: String { rawValue }

}

struct ShowEnumAllCasesView: View {
    
    var body: some View {
        HStack {
            ForEach(Feelings.allCases, id: \.id) { feeling in
                Text(feeling.rawValue)
                    .font(.largeTitle)
            }
        }
    }
}

1️⃣ enumをCaseIterableに準拠させる

enum Feelings: String, CaseIterable {
    
    case bad = "😢"
    case soso = "🙂"
    case good = "😊"
    
    var id: String { rawValue }

}

CaseIterableに準拠させることで、以下のタイププロパティを利用できるようになります。

static var allCases: Self.AllCases { get }

2️⃣ allCasesタイププロパティを使用する

CaseIterableに準拠させたあとは、enum名.allCasesですべての要素をを含む配列を取得することができます。

HStack {
    ForEach(Feelings.allCases, id: \.id) { feeling in
        Text(feeling.rawValue)
            .font(.largeTitle)
    }
}

まとめ

enumの全要素を取得するには、以下2つが必要

  1. enumをCaseIterableに準拠させる
  2. allCasesタイププロパティを使用する

Discussion