将 SwiftUI 与核心数据一起使用

Using SwiftUI with Core Data

SwiftUI 表需要绑定到一个数组,该数组将整个模型对象存储在内存中。对于小型数据集,性能的便利性权衡是有意义的。但是对于具有 tens/hundreds 数千个值的数据集,通过查询数据源来呈现表的老式方法似乎仍然是可行的方法。 (考虑一个简单的 dictionary/thesaurus 应用程序。)。

有没有办法在 SwiftUI 中实现 dataSource-style/CoreData-backed 表?

列表不需要 ArrayData 必须符合 RandomAccessCollection 协议。 这也可能是您的 NSFetchedResultsController.

extension List {
    /// Creates a List that computes its rows on demand from an underlying
    /// collection of identified data.
    @available(watchOS, unavailable)
    public init<Data, RowContent>(
        _: Data,
        selection _: Binding<Selection>?,
        rowContent _: @escaping (Data.Element.IdentifiedValue) -> RowContent
    ) where Content == ForEach<Data, HStack<RowContent>>,
        Data: RandomAccessCollection,
        RowContent: View,
        Data.Element:
        Identifiable

    /// Creates a List that computes its rows on demand from an underlying
    /// collection of identified data.
    @available(watchOS, unavailable)
    public init<Data, RowContent>(
        _: Data,
        selection _: Binding<Selection>?,
        action _: @escaping (Data.Element.IdentifiedValue) -> Void,
        rowContent _: @escaping (Data.Element.IdentifiedValue) -> RowContent
    ) where Content == ForEach<Data, Button<HStack<RowContent>>>,
        Data: RandomAccessCollection,
        RowContent: View, Dat
}

我认为这就是在 SwiftUI 中使用 ForEach() for 循环的原因,因此视图可以控制需要实例化多少元素来填充屏幕。

并且核心数据获取请求中的数组可能不包含内存中的所有对象,它们仅在被访问时才被实例化。