It's because Swift doesn't know what type the value in screens is.
If you used this:
@State var screens: Array<FirstScreen> = [FirstScreen(), FirstScreen(), FirstScreen()]
Swift would know that screens is an array of FirstScreen, and so it can supply that view to ContentView. However, that's clearly not very useful, so you need to wrap it in AnyView.
Here you go:
struct ContentView : View {
@State var screens: [Any] = [FirstScreen.self, SecondScreen.self, ThirdScreen.self]
var body: some View {
self.buildView(types: self.screens, index: Int.random(in: 0..<screens.count))
}
func buildView(types: [Any], index: Int) -> AnyView {
switch types[index].self {
case is FirstScreen.Type: return AnyView(FirstScreen())
case is SecondScreen.Type: return AnyView(SecondScreen())
case is ThirdScreen.Type: return AnyView(ThirdScreen())
default: return AnyView(FirstScreen())
}
}
}
Topic:
UI Frameworks
SubTopic:
SwiftUI
Tags: