Ниже приведен пример реализации для тестирования функции @Observable
в SwiftUI. Он содержит простое представление списка и подробное представление.
Мы можем добавлять объекты в список (и они отражаются в представлении). Мы можем перейти к подробному просмотру и редактировать имя, описание. Но эти изменения не отражаются на предыдущем экране (в списке).
Это не правильный путь, или я должен использовать только переменную @EnvirnomentObject
, чтобы получить желаемый результат?
import SwiftUI
struct ContentView: View {
@ObservedObject var model: ModelOne
var body: some View {
NavigationView{
List(){
ForEach(model.items,id: \.id){
item in
NavigationLink(destination: DetailView(item: item)){
VStack(alignment: .leading){
Text(item.name).lineLimit(1)
Text(item.description).lineLimit(1)
}.onAppear {
print("\(item.name)")
}
}
}
}.navigationBarTitle("List", displayMode: .inline)
.navigationBarItems(trailing: AddItem(buttonAction: {
let newItem = Items()
newItem.name = "Empty"
newItem.description = "Empty"
self.model.items.append(newItem)
}))
}
}
}
struct AddItem: View {
var buttonAction: (()->Void)
var body: some View{
Button(action: {
self.buttonAction()
}){
Text("Add")
}
}
}
class ModelOne: ObservableObject{
@Published var items: [Items] = []
}
class Items: Identifiable{
var id: UUID = UUID()
var name: String = ""
var description: String = ""
}
Детальный просмотр:
import SwiftUI
struct DetailView: View {
@ObservedObject var item: Items
var body: some View {
VStack{
TextField(item.name, text: $item.name)
TextField(item.description, text: $item.description)
}
}
}