簡體   English   中英

有沒有更好的方法來實現基於視圖選擇器選擇顯示不同的視圖?

[英]Is there a better way to implement displaying different views based on view picker selection?

請查看以下代碼並告訴我這一點。 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"))
        }
    }
}

如果你 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")
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM