Вы можете использовать любую инфраструктуру базы данных, важный способ использования инфраструктуры SwiftUI и Combine - в ObservableObject
, и как работает @EnvironmentObject
.
1) Создайте свой ObservableObject
class UserData: ObservableObject {
@Published searchList: [SearchItemModel] = []
@Published savedList: [SearchItemModel] = []
}
увидит, что @Published
, он сообщит всем слушателям, если этот список будет обновлен.
2) Добавьте @EnvironmentObject
в ваш TabView
struct ContentView: View {
@EnvironmentObject var userData: UserData
var body: some View {
TabView {
...
}
здесь я назвал мое представление ContentView
, представление, содержащее TabView
.
3) Заполните UserData
let contentView = ContentView().environmentObject(UserData())
4) Создайте представление списка поиска и сохраненное представление списка
struct SearchListView: View {
@EnvironmentObject var userData: UserData
var body: some View {
List {
...
}
struct SavedListView: View {
@EnvironmentObject var userData: UserData
var body: some View {
List {
...
}
здесь вы видите, что SearchListView
и SavedListView
у каждого из них есть свои @EnvironmentObject
.
Нам нужно отправить наш userData
объект из ContentView
в их? Ответ: нет.
Способ работы @EnvironmentObject
автоматизирован и передается по ссылке на дочернее представление, в котором объявлено то же @EnvironmentObject
.
ContentView.userData == SearchListView.userData == SavedListView.userData
, поскольку
ContentView.userData
|
TabView
| \
SearchListView SavedListView
5) Обновите список в UserData
Все, что нам нужно сейчас, это обновить savedList
в userData
с SearchListView
, и SavedListView
будет автоматически обновлено.
ForEach(userData.searchList) { item in
ListView(item: item)
.onTapGesture {
self.userData.savedList.append(item)
}
Я предлагаю вам следовать этому руководству от Apple, чтобы лучше познакомиться с SwiftUI и Combine
После этого вы можете комбинировать его с любой платформой базы данных.