Skip to main content

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)")
}
}
}