首页 > 解决方案 > 使用 Core Data 的嵌套函数

问题描述

SwiftUI 新手在这里 :-)

我有一个核心数据实体“汽车”,具有以下属性:

    @NSManaged public var id: UUID?
    @NSManaged public var uses: Int16
    @NSManaged public var cost: Int16
    @NSManaged public var type: String

我试图打印出每种类型汽车的平均每次使用成本(我的意思是,例如,使用所有大众汽车的次数,除以所有大众汽车的总成本,除以大众汽车的总数)。

我已经设法将汽车分组为具有以下功能的类型group

func group(_ result : FetchedResults<Cars>)-> [[Cars]] {
        
    return Dictionary(grouping: result) { $0.type }
            .sorted(by: {$0.key < $1.key})
            .map {$0.value}
        
    }

但是,现在我正在努力创建一个包含每种类型平均值的数组。

我尝试添加此功能,但收到消息“在范围内找不到 'av'”:

func andAv (cars: [[Cars]]) -> [Int] {
    
    
    ForEach(cars, id: \.self) { i in
        
        let sumCost = i.map { Int($0.cost) }.reduce(0,+)
        let sumUses = i.map { Int($0.uses) }.reduce(0,+)
        let itemCount = i.map { $0.id }.count
        let av = sumCost / sumUses / itemCount
    }
    
    return [av]
    
}

我想也许我需要使用嵌套函数?

正如我所提到的,我是一名初学者,而 SwiftUI 是我的第一门编程语言,所以我可能遗漏了一些非常明显的东西或犯了一个愚蠢的错误。在任何一种情况下,任何帮助都非常感谢!

标签: functioncore-dataswiftui

解决方案


ForEach是一种 SwiftUI 类型,用于基于数据集合创建视图。此时您对视图不感兴趣。

func andAv (cars: [[Cars]]) -> [Int] {
    
    let averages: [Int] = cars.map { i in
        
        let sumCost = i.map { Int($0.cost) }.reduce(0,+)
        let sumUses = i.map { Int($0.uses) }.reduce(0,+)
        let itemCount = i.count
        let av = sumCost / sumUses / itemCount
        return av
    }
    
    return averages
    
}

您还应该解决 vadian 关于整数和核心数据类型的答案中的要点,但您的基本问题是ForEach构建视图,而不是处理数据。


推荐阅读