gpt4 book ai didi

core-data - 为 SwiftUI 中的预览传递核心数据 FetchedResults

转载 作者:行者123 更新时间:2023-12-03 20:25:47 33 4
gpt4 key购买 nike

我有一个父 View ,它执行 @FetchRequest并通过 FetchedResults<T>到 subview 。一切正常, subview 能够解析 FetchedResults .但是,我不知道如何设置数据,以便 child 的Preview结构会起作用。在Preview中设置一些常量数据的正确方法是什么? struct 以便我可以实例化 subview 并传入 FetchedResults<T> ?

最佳答案

FetchedResults<T>RandomAccessCollection和 swift 数组也是一个 RandomAccessCollection ,这是可能的解决方案。
使用 Xcode 11.4/iOS 13.4 测试

struct ContentView: View {
@Environment(\.managedObjectContext) var context
@FetchRequest(entity: Person.entity(), sortDescriptors: [])
var result: FetchedResults<Person>

var body: some View {
VStack(alignment: .leading) {
Text("Persons").font(.title)
PersonsView(results: result) // FetchedResults<Person> is a collection
}
}
}

// generalize PersonsView to depend just on collection
struct PersonsView<Results:RandomAccessCollection>: View where Results.Element == Person {
let results: Results
var body: some View {
ForEach(results, id: \.self) { person in
Text("Name: \(person.name ?? "<unknown>")")
}
}
}

struct ChildView_Previews: PreviewProvider {
static var previews: some View {
PersonsView(results: [Person()]) // << use regular array to test
}
}
更新: Xcode 12/iSO 14 的固定和测试部分(由于上述 PreviewProvider 崩溃)
看起来实体现在应该被明确地读取和指定:
struct ChildView_Previews: PreviewProvider {
static let entity = NSManagedObjectModel.mergedModel(from: nil)?.entitiesByName["Person"]

static var previews: some View {
let person = Person(entity: entity!, insertInto: nil)
person.name = "Test Name"

return PersonsView(results: [person])
}
}

关于core-data - 为 SwiftUI 中的预览传递核心数据 FetchedResults<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61495141/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com