Skip to content

Instantly share code, notes, and snippets.

@phillip5094
Created January 4, 2024 15:46
Show Gist options
  • Save phillip5094/9f4bf615d542a890157e57b7b7d72c7b to your computer and use it in GitHub Desktop.
Save phillip5094/9f4bf615d542a890157e57b7b7d72c7b to your computer and use it in GitHub Desktop.
struct ContentView: View {
struct FileItem: Hashable, Identifiable, CustomStringConvertible {
let id = UUID()
var name: String
var children: [FileItem]? = nil
var description: String {
switch children {
case nil:
return "πŸ“„ \(name)"
case .some(let children):
return children.isEmpty ? "πŸ“‚ \(name)" : "πŸ“ \(name)"
}
}
}
let fileHierarchyData: [FileItem] = [
FileItem(name: "users", children:
[FileItem(name: "user1234", children:
[FileItem(name: "Photos", children:
[FileItem(name: "photo001.jpg"),
FileItem(name: "photo002.jpg")]),
FileItem(name: "Movies", children:
[FileItem(name: "movie001.mp4")]),
FileItem(name: "Documents", children: [])
]),
FileItem(name: "newuser", children:
[FileItem(name: "Documents", children: [])
])
]),
FileItem(name: "download", children: [
FileItem(name: "document.pdf")
])
]
var body: some View {
List {
ForEach(fileHierarchyData) { fileItem in
Section {
OutlineGroup(fileItem.children ?? [FileItem](), children: \.children) { item in
Text("\(item.description)")
}
} header: {
Text(fileItem.name)
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment