Как передать состояние из списка выбора в модальном для родителя в SwiftUI - PullRequest
1 голос
/ 22 января 2020

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

Я использую ObservedObject для SelectedItems:

class SelectedItems: ObservableObject, Hashable {
    @Published var items: [Item] = []

    func hash(into hasher: inout Hasher) {
        hasher.combine(items)
    }

    init(items: [Item]) {
        self.items = items
    }
}

В родительском представлении я просто через l oop они:

...

@ObservedObject var selectedItems: SelectedItems

...

List(self.selectedItems.items) { item in
  Text(item.name)
}

Проблема в модальном представлении:

...

@ObservedObject var selectedItems: SelectedItems
var items: [Item]

...

List(items, id: \.self, selection: selectedItems) { item in
  Text(item.name)
}
.environment(\.editMode, .constant(EditMode.active))

Я убедился, что selectedIngredients соответствует Hashable, как требуется List Selection, но все еще выбрасывает ряд ошибок.

Специфическая ошибка c в этом случае - Generi c параметр 'SelectionValue' could not be inferred.

Я занимался этим пару дней, и любая помощь действительно нужно ценить!

1 Ответ

1 голос
/ 22 января 2020

List выбор ожидает от Binding до одной Element последовательности перечисления до Set<Element>, поэтому ваш случай может быть решен с помощью следующего подхода

List(items, id: \.self, selection: Binding<Set<Item>>(
    get: { Set(self.selectedItems.items) },
    set: { self.selectedItems.items = Array<Item>($0) }
)) { item in
  Text(item.name)
}
.environment(\.editMode, .constant(EditMode.active))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...