如何将 Swift CoreData 值保存到数组中

ral*_*lfb 1 core-data swift

我是 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 值创建一个具有双精度值的数组?

问候,拉尔夫

Lar*_*rme 5

您想要将 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,并且都是绝对值?