请查看以下代码,并告诉我。 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"))
}
}
}
答案 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")
}
}
}
}