将 SwiftUI 与核心数据一起使用
Using SwiftUI with Core Data
SwiftUI 表需要绑定到一个数组,该数组将整个模型对象存储在内存中。对于小型数据集,性能的便利性权衡是有意义的。但是对于具有 tens/hundreds 数千个值的数据集,通过查询数据源来呈现表的老式方法似乎仍然是可行的方法。 (考虑一个简单的 dictionary/thesaurus 应用程序。)。
有没有办法在 SwiftUI 中实现 dataSource-style/CoreData-backed 表?
列表不需要 Array
。 Data
必须符合 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 循环的原因,因此视图可以控制需要实例化多少元素来填充屏幕。
并且核心数据获取请求中的数组可能不包含内存中的所有对象,它们仅在被访问时才被实例化。
SwiftUI 表需要绑定到一个数组,该数组将整个模型对象存储在内存中。对于小型数据集,性能的便利性权衡是有意义的。但是对于具有 tens/hundreds 数千个值的数据集,通过查询数据源来呈现表的老式方法似乎仍然是可行的方法。 (考虑一个简单的 dictionary/thesaurus 应用程序。)。
有没有办法在 SwiftUI 中实现 dataSource-style/CoreData-backed 表?
列表不需要 Array
。 Data
必须符合 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 循环的原因,因此视图可以控制需要实例化多少元素来填充屏幕。
并且核心数据获取请求中的数组可能不包含内存中的所有对象,它们仅在被访问时才被实例化。