制作ToolbarContent SwiftUI的状态变量

yeotifhr  于 2023-06-21  发布在  Swift
关注(0)|答案(1)|浏览(101)

我正在做一个SwiftUI项目,我试图在我的应用程序中有多个不同的Toolbar版本。当按下一个按钮时,它们理想地应该改变。因此,我使用这个定义定义了几个不同的工具栏(工具栏中的实际代码并不重要):

@ToolbarContentBuilder fileprivate var ______: some ToolbarContent {
    ToolbarItem(...)
    ToolbarItem(...)
}

下一步是创建一个@State变量,用于保存当前选定的工具栏。我试着这样做:

@State var navBarView: some ToolbarContent = _________

然而,这给出了错误:

Result builder attribute 'ToolbarContentBuilder' can only be applied to a property if it defines a getter

有人知道如何完成这个目标或绕过这个错误吗?谢谢!

rdlzhqv9

rdlzhqv91#

您不应该将ToolbarContent用作@State,就像将View用作@State一样。
创建一个枚举,它对您拥有的许多工具栏进行编码,例如:

enum ToolbarState {
    case one, two
    
    @ToolbarContentBuilder
    var content: some ToolbarContent {
        switch self {
        case .one:
            ToolbarItem {
                Button("Foo1") {
                    
                }
            }
            ToolbarItem {
                Button("Foo2") {
                    
                }
            }
        case .two:
            ToolbarItem {
                Button("Bar") {
                    
                }
            }
        }
    }
}

将此用作状态:

@State var toolbarState = ToolbarState.one

var body: some View {
    NavigationStack {
        Button("Change State") {
            toolbarState = .two
        }.toolbar {
            toolbarState.content
        }
    }
}

相关问题