SwiftUI Необязательный аргумент привязки при инициализации просмотра - PullRequest
1 голос
/ 09 мая 2020

У меня есть представление, которое иногда используется для просмотра данных, а иногда и для выбора данных.

При использовании для просмотра оно представлено NavigationLink.

Когда используется для выбора данных, он представлен как модальный лист и закрывается установкой логического привязки isPresent в false, поэтому я могу использовать функцию листа onDismiss.

Однако в режиме просмотра мне нужен способ пропустить инициализацию логического привязки isPresent. Правильный способ - это необязательный аргумент в представлении 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 Ответ

3 голосов
/ 09 мая 2020

Используйте постоянную привязку, например

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