是否有更好的方法来实现基于视图选择器选择显示不同的视图?

时间:2020-05-01 11:28:24

标签: swiftui

请查看以下代码,并告诉我。 1.是否有更好的方法来实现此功能? 2.我知道 AnyView 对性能有影响,但是如果没有更好的方法来应用 SRP ,那么对性能的影响是否值得?

struct ContentView: View {
    @ObservedObject var viewPicker = ViewPicker()

    var body: some View {
        VStack {
            Picker("View Picker", selection: $viewPicker.selectionIndex) {
                Text("Days").tag(0)
                Text("Months").tag(1)
                Text("Years").tag(2)
            }
            .pickerStyle(SegmentedPickerStyle())

            viewPicker.pick()
        }

    }
}

struct DayView: View {
    var body: some View { Text("Day View") }
}

struct MonthView: View {
    var body: some View { Text("Month View") }
}

struct YearView: View {
    var body: some View { Text("Year View") }
}


//MARK:- View Picker
class ViewPicker: ObservableObject {
    @Published var selectionIndex = 0

    func pick() -> AnyView {
        switch selectionIndex {
        case 0:
            return AnyView(DayView())
        case 1:
            return AnyView(MonthView())
        case 2:
            return AnyView(YearView())
        default:
            return AnyView(Text("Unknown"))
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果按照这种方式,从我的SwiftUI设计角度来看,以下内容对我来说更合适

通过Xcode 11.4测试

class ViewPicker: ObservableObject {
    @Published var selectionIndex = 0

    func pick() -> some View {
        Group {
            if selectionIndex == 0 {
                DayView()
            }
            if selectionIndex == 1 {
                MonthView()
            }
            if selectionIndex == 2 {
                YearView()
            }
            if selectionIndex > 2 {
                Text("Unknown")
            }
        }
    }
}