函数声明了一个不透明的返回类型“some View”,但其主体中的返回语句没有匹配的基础类型

问题描述 投票:0回答:2

我在 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 '

swift swiftui view
2个回答
11
投票

您必须将变量设为

@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")
        }
    }
}

0
投票

您也可以像之前尝试过的那样使用“任何视图”而不是“某些视图”,如果您需要视图,只需使用 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)
© www.soinside.com 2019 - 2024. All rights reserved.