ios - CoreData 通过属性总和而不是单个记录进行奖励

标签 ios swift core-data

我正在开发一款应用程序,当用户记录步行、骑自行车或乘坐公共(public)汽车时,该应用程序会奖励用户。他们在每次旅程达到一定距离后会获得奖励,但我想根据他们使用 CoreData 通过应用程序记录的总距离进行奖励。

我尝试查看有关同一主题的其他 Stack Overflow 问题,但到目前为止尚未成功

for journey in journeys where journey.distance > reward.distance {
         if earned == nil {
          earned = journey
        }

最佳答案

你的要求有点令人困惑。要检查某些元素的总和是否大于某个值,最好在 swift 中使用 reduce 。类似于以下内容:

private func checkRewardAchieved(_ reward: Reward, withJourneys journeys: [Journey]) -> Bool {
    return journeys.reduce(0.0, { $0 + $1.distance }) >= reward.distance
}

此处 journeys.reduce(0.0, { $0 + $1.distance }) 将返回数组中所有距离的总和。然后将总和与奖励>=reward.distance进行比较,结果要么为真,要么为假。

不过,直接使用核心数据计算总和可能会更好。这样做this answer看起来很有希望。

关于ios - CoreData 通过属性总和而不是单个记录进行奖励,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55900781/

相关文章:

ios - 隐藏 Storyboard 中不同 View Controller 上的顶部和工具栏

Swift - 变量作为 if 语句的一部分进行更新,但随后会恢复

ios - managedObjectContext 无法识别的选择器发送到实例

ios - 持久存储错误的内存管理错误

ios - 如何从网页启动照片应用程序

ios - 在iOS应用程序中使用音频文件或文本进行语音转换

ios - 如何将 View 从纵向模式更改为横向模式并锁定它?

ios - Swift:类方法只能在类型上声明

swift - 进行调用的代码 - 无法调用非功能类型 "String"的值

ios - 如何在 Core Data 中使用派生属性