提问者:小点点

View init上的SwiftUI可选绑定参数


我有一个视图,有时用于浏览数据,有时用于选择数据。

当用于浏览时,它由NavigationLink呈现。

当用于选择数据时,它以模式表的形式显示,并通过将绑定布尔值isPresented设置为false来关闭,因此我可以使用表函数onDismiss。

然而,在浏览模式下,我需要一种方法来跳过初始化isPresent绑定布尔值。正确的方法是view init()上的可选参数,但我尝试的所有内容都会抛出错误。

这就是我称之为浏览数据的方式:

NavigationLink(destination:BrowseOrSelectView(selMode:SelModes.browse)) {
Text("Browse")
}

这就是我称之为选择数据的方式:

.Sheet(isPresented: self.$isPresented, onDismiss:{...}) {
    BrowseOrSelectView(selMode: SelModes.selection, isPresented: self.$isPresented)
}

这是观点:

struct BrowseOrSelectView: View {
    @State var selMode:SelModes
    @Binding var isPresented:Bool

    public init(selMode: SelModes, isPresented:(Binding<Bool>)? = true) {
        UITableView.appearance().separatorStyle = .none
        _selMode = State(initialValue: selMode)
    }
...
}

引发的错误是:

无法将类型“Bool”的值转换为预期的参数类型 Binding Bool


共1个答案

匿名用户

使用常量绑定,如

public init(selMode: String, isPresented:(Binding<Bool>) = .constant(true)) {
    UITableView.appearance().separatorStyle = .none
    _selMode = State(initialValue: selMode)
    _isPresented = isPresented
}

相关问题