Использование объектов CoreData в списке в качестве объекта среды

В настоящее время я создаю приложение для чтения новостей с SwiftUI.

Я выбираю элементы фида и сохраняю их в CoreData

Я хотел бы отобразить объекты в списке, содержащем NavigationLink, в подробный вид и автоматически пометить их как прочитанные при нажатии на них.

В настоящее время я выбираю объекты и помещаю их в 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

        }
    }

}

В момент, когда я создаю объект среды (EO), содержащий массив всех объектов ObservableObject. Этот 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])
        }
    }
}

Этот метод довольно медленный. Всякий раз, когда я открываю подробный вид и возвращаюсь на несколько секунд позже, элементу списка требуется несколько секунд для обновления.

Любые идеи о том, как я мог бы улучшить это?

0 ответов

Другие вопросы по тегам