【发布时间】:2020-12-21 19:14:07
【问题描述】:
使用 SwiftUI,我在数据库中创建 Favorite 对象时尝试更新数据。创建成功,调用reload函数时,可以得到正确的信息。
但是,当我更改视图时,它不会在视图中重新加载。
我的数据代码:
// Favorite
struct Favorite: Decodable, Identifiable {
var id:Int?
public var id: Int?
public var name: String?
public var type: String?
var addres: String?
}
class Favorite: ObservableObject {
var userID = userViews().id
@Published var favorites = [Favorite]()
init(){
load()
}
func load() {
let url = URL(string: "https://***********/getFavoriteApi/")
URLSession.shared.dataTask(with: url) {(data, response, error) in
do {
if let d = data {
let decodedLists = try JSONDecoder().decode([Favorite].self, from: d)
DispatchQueue.main.async {
self.favorites= decodedLists
print(self.favorites)
}
}else {
print("No Data")
}
} catch {
print ("Error")
}
}.resume()
}
}
如果我打印(self.favorites)它可以在创建收藏夹后看到新的可选,但视图不会重新加载它。
我的查看代码:
struct FavoriteView: View {
@ObservedObject var favorites = Favorite()
var name = UserDefaults.standard.value(forKey: "name")as? String ?? "null"
var userID = userViews().id
var body: some View {
VStack{
Text("My Favorite")
.font(.title)
GeometryReader{mainView in
ScrollView(.vertical, showsIndicators: false) {
VStack{
ForEach(favorites.posts){post in
NavigationLink(destination: FavoriteDetail(post: post)) {
GeometryReader{item in
rentView1(post: post)
// scaling effect from bottom....
.scaleEffect(scaleValue(mainFrame: mainView.frame(in: .global).minY, minY: item.frame(in: .global).minY),anchor: .bottom)
// adding opacity effect...
.opacity(Double(scaleValue(mainFrame: mainView.frame(in: .global).minY, minY: item.frame(in: .global).minY)))
}
.frame(height: 100)
}
}
}
.padding(.horizontal)
.padding(.top,25)
}
.zIndex(1)
}
}
}
}
恐怕我做错了什么,或者我不明白 ObservedObjects 如何与 JSONDecoder 一起工作。
欢迎任何帮助或解释!谢谢。
【问题讨论】:
-
Fetcher是什么? -
对不起,我错了,这是我的最爱,而不是 Fetcher