Swift・iOS

Swiftを中心に学んだことを記録に残すブログです。技術に関係ない記事もたまに書いています。

【SwiftUI】セクションごとに分けてListを表示する

 

はじめに

【SwiftUI】Listを表示する - Swift・iOSの続きです。今回はListをセクションごとに分けて表示する実装を試したので記事に残します。

 

開発環境

 

サンプルイメージ

f:id:hfoasi8fje3:20210326182524p:plain

 

実装

import SwiftUI

struct SettingView: View {    
    struct SettingTitle: Hashable, Identifiable {
        var id = UUID()
        var title : String
    }
    
    struct Setting: Identifiable {
        var id = UUID()
        var header: String
        var settingTitles: [SettingTitle]
    }
    
    var settings: [Setting] = [
        Setting(header: "ブックマーク",
                settingTitles: [SettingTitle(title: "編集")]),
        Setting(header: "その他",
                settingTitles: [SettingTitle(title: "プライバシーポリシー"),
                                SettingTitle(title: "ライセンス"),
                                SettingTitle(title: "バージョン")])
    ]
    
    var body: some View {
        VStack(alignment: .leading) {
            Text("設定")
                .font(.title)
                .bold()
                .padding([.leading, .trailing, .top], 25)
            
            List {
                ForEach(settings) { setting in
                    Section(header: Text(setting.header)) {
                        ForEach(setting.settingTitles) { titles in
                            Text(titles.title)
                        }
                    }
                }
            }
            .listStyle(InsetGroupedListStyle())
        }
    }
}

 

おわりに

ForEach関連の以下エラーが出ることがありましたが、結局ただの構造体の定義ミスだったので、同様のエラーが出た場合はまず構造体の定義を見直した方がよいかもしれません。(エラー文を元に調べていたのですが、結構詰まってしまったので・・・笑)

  • "Compile error: Generic struct ‘ForEach’ requires that ‘S.AllCases’ conform to ‘RandomAccessCollection’
  • "Unable to infer closure type in the current context in SwiftUI"

 

参考