我正在尝试构建一个非常简单的SwiftUI程序来轻松地交换视图。目标是尽可能简单地添加更多视图,而不必更改确定视图方式的代码(因此标准if-else将无法工作)。
我目前的想法是保留一个字典,将视图存储为键-值对的一部分。下面是一个非常基本的实现示例:
import SwiftUI
struct ViewA: View {
var body: some View {
Text("This is View A")
}
}
struct ViewB: View {
var body: some View {
Text("This is View B")
}
}
struct MainView: View {
var subviews: [String:View] = [
"View-1": ViewA(),
"View-2": ViewB(),
]
var body: some View {
self.subviews["View-1"]
}
}然而,我在创建字典的行上得到了一个错误:Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements。
对于字典的值部分,我尝试了许多不同的类型,包括AnyView、Groups和在MainView结构上创建泛型类型<Content: View>。然而,这些方法会产生更多/不同的错误。
我看过SwiftUIRouter项目,因为它在某种程度上解决了我想要达到的目标,但是我的目标有点简单。
提前谢谢。
发布于 2020-08-10 07:12:41
Swift没有命名的下标,所以你必须把它拼凑在一起,但你可以使用相同的调用语法,否则会更有用/更好的语言特性:
struct MainView: View {
var body: some View {
subviews["View-1"]
}
enum subviews {
@ViewBuilder static subscript(string: String) -> some View {
switch string {
case "View-1":
ViewA()
case "View-2":
ViewB()
default:
fatalError()
}
}
}
}https://stackoverflow.com/questions/63331586
复制相似问题