swiftui-treeview | ios-app-dev-memo
SwiftUI 汎用的TreeView
こんな感じのクラスが最小限と思う
swift
struct Node: Hashable {
var name: String
var children: [Node]?
static func == (lhs: Self, rhs: Self) -> Bool {
return lhs.name == rhs.name
}
func hash(into hasher: inout Hasher) {
hasher.combine(name)
}
var isLeafNode: Bool {
children == nil
}
var isParentNode: Bool {
children != nil
}
}
View側
swift
import SwiftUI
struct PrefListView: View {
@EnvironmentObject var appData: ApplicationData
@Binding var selectedAreaOrPref: Node?
var body: some View {
List(
appData.areaToPrefNodes,
id: \.self,
children: \.children,
selection: $selectedAreaOrPref
) { node in
Text("\(node.name)")
}
}
}