如何解决SwiftUI-尽管使用@Published和@ObservedObject
使用SwiftUI更新应用的主视图时遇到问题。
struct Dog: Identifiable {
var id = UUID()
var name: String
var race: String
var age: Int
var gender: String
var sterile: Bool
var pictureURL: String
var location: String
var dogFriendly: Bool
var catFriendly: Bool
var childFriendly: Bool
var needsGarden: Bool
var isClean: Bool
}
我的目标是在 AddView.swift 中按下此按钮:
@Observedobject var viewmodel = Addviewmodel()
************** LONG UI CODE *******************
.navigationBarItems(trailing:
Button("Publish") {
viewmodel.dogs.append(Dog(name: self.name,race: races[selectedRace],age: self.age,gender: genders[selectedGender],sterile: self.issterile,pictureURL: "",location: "",dogFriendly: self.isDogFriendly,catFriendly: self.isCatFriendly,childFriendly: self.isChildFriendly,needsGarden: self.needsGarden,isClean: self.isClean))
print(viewmodel.dogs)
})
将狗添加到 Addviewmodel.swift 中的Dog数组中:
class Addviewmodel: ObservableObject {
@Published var dogs: [Dog] = []
}
,然后在CardView中显示信息:
struct CardView: View {
//MARK: - Properties
@State var dog: Dog
//MARK: - View
var body: some View {
******* LONG UI CODE ********
}
并在HomeView中显示那些CardView:
struct HomeView: View {
@Observedobject var viewmodel = Addviewmodel()
var body: some View {
ScrollView {
vstack {
ForEach(viewmodel.dogs) { dog in
CardView(dog: dog) // this doesn't work
Text(dog.name) // this doesn't work neither
}
}
}
}
}
有人可以帮我解决这个问题,并给我一些建议吗?
感谢您的慷慨帮助!
解决方法
将@State更改为@Bindig将对其进行修复。
CardView:
struct CardView: View {
//MARK: - Properties
@Binding var dog: Dog
//MARK: - View
var body: some View {
******* LONG UI CODE ********
}
,
我认为您想在console.log(JSON.stringify(request.body));
内附加Array
的{{1}}并在Dog
内显示更新的数据。因此,您只是在每个视图中分别声明了AddView
的实例。视图中的两个实例不会相互观察。为了解决这个问题,我更喜欢使用HomeView
模式。这是我的示例代码。
AddViewModel
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。