将SwiftUI与核心数据结合使用

时间:2019-06-14 01:38:17

标签: core-data swiftui

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

有没有一种方法可以在SwiftUI中实现由数据源样式/ CoreData支持的表?

2 个答案:

答案 0 :(得分:5)

列表不需要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
}

答案 1 :(得分:0)

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

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