如何使用动态视图名称创建导航链接的SwiftUI列表



我正在尝试创建一个简单的视图列表供用户访问,我不知道如何用数组变量替换视图名称。在下面的例子中,destination:被硬编码为AVExample((,这是我的一个视图,但我如何使用数组中的名称?

struct test: View {

var views = ["AVExample", "ColorPickerExample", "DatePickerExample"]

var body: some View {

NavigationView {
List (views, id: .self){ view in

NavigationLink(
destination: AVExample(),
label: {
Text("(view)")
})
}
}
}
}

您可以为视图创建一个结构,然后使用该结构数组。例如:

struct ViewsList: Identifiable {
static func == (lhs: ViewsList, rhs: ViewsList) -> Bool {
return lhs.id == rhs.id
}

var id: Int
var name: String
var viewContent: AnyView
}

然后在您的视图类(测试(中,创建ViewList结构的数组:

var views = [ViewsList.init(id: 1, name: "Example", viewContent: AnyView(AVExample())), ViewsList.init(id: 2, name: "ColorPicker", viewContent: AnyView(ColorPicker()))]

然后你可以在这个数组上循环如下:

NavigationView {
List (views, id: .id){ view in

NavigationLink(
destination: view.viewContent,
label: {
Text("(view.name)")
})
}

非常感谢您的回复。我想出了下面的解决方案,似乎效果很好。

private struct aView {
var id = UUID()
var view: AnyView
var label: String
}
private var views = [
aView(view: AnyView(AppStorageExample()), label: "App Storage"),
aView(view: AnyView(AppStoreRecommend()), label: "App Store Recommended"),
aView(view: AnyView(AVExample()), label: "AV Player"),
aView(view: AnyView(ColorPickerExample()), label: "Color Picker"),
]
var body: some View {
List (views, id: .id) { view in
NavigationLink(
destination: view.view,
label: {
Text("(view.label)")
})
}

}

最新更新