我是 Swift 和 CoreData 的新手,我有一个关于如何读取存储在 CoreData (NsManagedObject) 中的数据并将其保存到数据数组的问题,该数据数组可以用作 SwiftUI 折线图的输入。
我的测试数据模型很简单:
@NSManaged public var date: Date?
@NSManaged public var value: Double
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码读取值的数量:
private func fetchItem() {
withAnimation {
let fetchRequest: NSFetchRequest<Rate> = Rate.fetchRequest()
do {
let fetchedResults = try viewContext.fetch(fetchRequest)
print("#Entities: \(fetchedResults.count)")
} catch {
print(error)
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要将核心数据中的双精度值存储在数组中。对于折线图演示(iLineChart),我有以下测试数据数组:
let data = (1...100).map( {_ in Double.random(in: -1...10)} )
Run Code Online (Sandbox Code Playgroud)
问题:
如何从 NSManagedObject 值创建一个具有双精度值的数组?
问候,拉尔夫
您想要将 Rate 数组(即[Rate])转换为 Double 数组(即Double),其中将填充value每个Rate。
这是一份工作map()!它正是这样做的:迭代初始数组,对于每个元素(这里是一个Rate元素)返回您想要从中提取的内容(这里只是它的属性value)。
快速回答和“Swifty”之一:
let data = fetchedResult.map { $0.value }
Run Code Online (Sandbox Code Playgroud)
更明确地说:
let data = fetchedResult.map { aRate in
return aRate.value
}
Run Code Online (Sandbox Code Playgroud)
手动完成:
var data: Double = []
for aRate in fetchedResults {
data.append(aRate.value)
}
Run Code Online (Sandbox Code Playgroud)
注意:它map是 Swifty,在 oneline 中,但没有人应该批评 manuel 循环的使用for。这是基本算法,理解它们是如何开发的坚实基础。因此,如果这仍然是您的知识水平,我建议使用 for 循环。因为如果您需要更改 的输出/结果map,您能够这样做吗?假设该值+该值的偏移量 30,并且都是绝对值?
| 归档时间: |
|
| 查看次数: |
956 次 |
| 最近记录: |