Есть ли лучший способ реализовать отображение разных видов на основе выбора средства выбора? - PullRequest
0 голосов
/ 01 мая 2020

Пожалуйста, посмотрите на следующий код и скажите мне это. 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 голосов
/ 01 мая 2020

Если вы go таким образом, для меня более подходящим будет следующее (с точки зрения дизайна 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")
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...