我目前正在使用 SwiftUI 创建一个 News-Feed-Reader 应用程序。
我正在获取提要项目并将它们存储在 CoreData
我想在包含 NavigationLinks 到详细视图的列表中显示对象,并在单击它们时自动将它们标记为已读。
我目前正在获取对象并将它们放入 ObservableObject 中。这是 ObservableObject 类:
final class FeedItem: ObservableObject, Hashable {
static func == (lhs: FeedItem, rhs: FeedItem) -> Bool {
return lhs.item.pubDate == rhs.item.pubDate && lhs.item.articleUrl == rhs.item.articleUrl
}
func hash(into hasher: inout Hasher) {
hasher.combine(item.articleUrl)
}
let objectWillChange = PassthroughSubject<Void, Never>()
init(item: NewsItem) {
self.item = item
}
// NewsItem is the Managed Object
var item: NewsItem
var bookmarked: Bool {
set {
//This function fetches the Object and marks it as bookmarked
DatabaseManager().markAs(item: item, .read, newValue)
self.item.bookmarked = newValue
}
get {
self.item.bookmarked
}
}
var read: Bool {
set {
//This function fetches the Object and marks it as read
DatabaseManager().markAs(item: item, .read, newValue)
self.item.read = newValue
}
get {
self.item.read
}
}
}
在我创建一个包含所有 ObservableObjects 的数组的环境对象 (EO) 的那一刻,这个 EO 被传递到列表中,每当我点击一个项目时,我都会将其读取值设置为 true,从而更改核心数据对象。
这是列表:
@EnvironmentObject var feed: // THe array of ObservableObjects
List() {
ForEach(feed.items.indices, id:\.self) { i in
Button(action: {
self.feed.items[i].read = true
self.selectedItem = i
self.showDetail = true
}) {
ListFeedItem(item: self.$feed.items[i])
}
}
}
这种方法相当缓慢。每当我打开详细视图并在几秒钟后返回时,List-Item 需要几秒钟才能刷新。
关于如何改进这一点的任何想法?