如何使用 Swift 在 Core Data 中组合属性?

Posted

技术标签:

【中文标题】如何使用 Swift 在 Core Data 中组合属性?【英文标题】:How to combine attributes in Core Data using Swift? 【发布时间】:2020-06-03 01:14:46 【问题描述】:

我有一个基本应用程序,允许用户从一系列动物中进行选择:[Cat, Bird, Dog] 并记录他们在一天中看到它的次数。我正在使用 Core Data 来保存每个用户的会话。当我从 Core Data 获取结果时,它们看起来像:

动物:鸟,见过:2

动物:猫,见过:1

动物:鸟,见过:4

Sessions 是实体,而属性是 animal: String 和 seen: Int。

然后我为每只动物贴上一个标签,上面写着总看到的次数。 示例:鸟 - 总数:6,猫 - 总数:1,狗 - 总数 0

如何将每个动物属性的“已见”属性加在一起以生成每个动物属性的总数量?下面的代码生成提取的核心数据结果。

 let context = coreDataStack.managedContext
 let fetchRequest = NSFetchRequest<Sessions>(entityName: "Sessions")

   do 
                let tasks = try context.fetch(fetchRequest)

                   for task in tasks 
                    print("Animal: \(task.animal)")
                    print("Seen: \(String(describing: seen))")
                   
                catch let error 
                   print("Error: \(error.localizedDescription)")
               

【问题讨论】:

请出示Sessions的声明。基本上我们需要知道task 是什么。 【参考方案1】:

根据你的问题,我猜每个数据条目都会有:

    动物名称(字符串) 已见计数 (Int)

所以,也许您可​​以尝试使用字典来保存每只动物的总数

var animalCount = [String : Int]()

for task in tasks 
    if animalCount[task.animal] == nil 
        animalCount[task.animal] = task.seen
            //I assume this seen is a property of this task
     else 
        animalCount[task.animal] = animalCount[task.animal]! + task.seen
    

animalCount.forEachprint("Animal: \($0.key) - Total: \($0.value)")

【讨论】:

已解决。谢谢!是的,动物名称是 String 类型, seen 是 Int 类型。

以上是关于如何使用 Swift 在 Core Data 中组合属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Core Data 中使用 swift 4 Codable?

如何使用 Swift 在 Core Data 中组合属性?

如何在 Swift 中的 Core Data 中保存多个项目

如何在 Swift 中使用 UISearchBar 和 NSFetchedResultsController 在 Core Data 上一次获取多个实体?

如何在 Swift Int64 中使用 Core Data Integer 64?

如何在 Swift 中从 Core Data 中删除数据时删除 UITableView 行?