我在 var view: some View{ 处收到错误。
enum HomeButtons: Int, Hashable, CaseIterable{
case registerSignal = 1
case setAlarm = 2
case tV = 3
case test = 4
var image: String{
switch self{
case .registerSignal:
return "wave.3.backward"
case .setAlarm:
return "alarm.fill"
case .tV:
return "tv.fill"
case .test:
return "av.remote.fill"
}
}
var text: String{
switch self{
case .registerSignal:
return "Register Signal for TV"
case .setAlarm:
return "Set up Alarm"
case .tV:
return "TV and Sequences"
case .test:
return "Test Device"
}
}
var view: some View{ <------- Error is displayed here
switch self{
case .registerSignal:
return RegisterView(title: self.text)
case .setAlarm:
return Text("Set up Alarm")
case .tV:
return Text("TV and Sequences")
case .test:
return Text("Test Device")
}
}
}
struct RegisterView: View{
var title: String
var body: some View{
ScrollView{
ForEach(getTVList(), id: \.TVID){ TV in
NavigationLink(value: TV.TVID){
Text(TV.name)
}
}
}
.background(Color("ToledoGolden"))
.foregroundColor(.accentColor)
.navigationTitle(title)
}
}
我尝试将 var view: some View 更改为 var view:any View 错误消失了,但我在调用 HomeButtons.view 时收到此错误消息:Type 'any View' 无法符合 'View '
您必须将变量设为
@ViewBuilder
并删除 return
enum HomeButtons: Int, Hashable, CaseIterable{
case registerSignal = 1
case setAlarm = 2
case tV = 3
case test = 4
var image: String{
switch self{
case .registerSignal:
return "wave.3.backward"
case .setAlarm:
return "alarm.fill"
case .tV:
return "tv.fill"
case .test:
return "av.remote.fill"
}
}
var text: String{
switch self{
case .registerSignal:
return "Register Signal for TV"
case .setAlarm:
return "Set up Alarm"
case .tV:
return "TV and Sequences"
case .test:
return "Test Device"
}
}
@ViewBuilder var view: some View{
switch self{
case .registerSignal:
RegisterView(title: self.text)
case .setAlarm:
Text("Set up Alarm")
case .tV:
Text("TV and Sequences")
case .test:
Text("Test Device")
}
}
}
您也可以像之前尝试过的那样使用“任何视图”而不是“某些视图”,如果您需要视图,只需使用 AnyView(HomeButton.view) 而不是直接调用
var view: any View{
get{ //don't forget
switch self{
case .registerSignal:
return RegisterView(title: self.text)
case .setAlarm: //...
以及使用方法
AnyView(HomeButton.view)