SwiftUI связывает массив объектов и показывает изменения - PullRequest
1 голос
/ 06 мая 2020

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

Допустим, у меня есть такой класс Item:

class Item: Identifiable {
    let id = UUID()
    var name: String
    var dateCreated: Date
}

И у этого класса есть инициализатор, который присваивает каждому члену полезное случайное значение.

Теперь предположим, что я хочу сохранить список элементов в другом классе, например:

class ItemStore {
    var items = [Item]()
}

Это хранилище элементов является частью моего SceneDelegate и передается в ContextView.

Теперь я хочу передать один элемент другому представлению (из стека NavigationView), где он будет изменен, но я не знаю, как сохранить внесенные изменения, чтобы они были отражены в списке, который отображается в ContextView. Моя идея состоит в том, чтобы сделать элемент хранящим объект среды. Но что мне нужно делать в классе элемента и как передать элемент в другое представление, чтобы это работало? Я уже пробовал что-то с видео из Apple WWD C, но там оболочки устарели, так что это не сработало.

Любая помощь приветствуется. Большое спасибо!

1 Ответ

0 голосов
/ 07 мая 2020

Возможный подход - использовать ObservableObject (из Combine) для хранения

class ItemStore: ObservableObject {
    @Published var items = [Item]()

   // ... other code 
}

class Item: ObservableObject, Identifiable {
    let id = UUID()
    @Published var name: String
    @Published var dateCreated: Date

   // ... other code 
}

и в зависимых представлениях

struct ItemStoreView: View {
   @ObservedObject var store: ItemStore
   // ... other code 
}

struct ItemView: View {
   @ObservedObject var item: Item
   // ... other code 
}
...