はじめに
【SwiftUI】Listを表示する - Swift・iOSの続きです。今回はListをセクションごとに分けて表示する実装を試したので記事に残します。
開発環境
- macOS Big Sur 11.2.3
- Xcode 12.4
- Swift 5.3.2
サンプルイメージ
実装
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"