Swiftui 迅捷:在身体里做数学

Swiftui 迅捷:在身体里做数学,swiftui,Swiftui,我正在从核心数据存储中获取数据,并将其显示在此视图中。其中一个值是整数“duration”。我想在NavigaationBarTitle中显示所有获取的“duration”值的总和。但是下面代码中的行“totalDuration+=event.eventDuration”调用生成时错误:“编译器无法在合理的时间内键入check此表达式…”。非常感谢您的帮助 导入快捷界面 导入CoreData 结构AdminEventsLog:视图{ @环境(\.managedObjectContext)变量m

我正在从核心数据存储中获取数据,并将其显示在此视图中。其中一个值是整数“duration”。我想在NavigaationBarTitle中显示所有获取的“duration”值的总和。但是下面代码中的行“totalDuration+=event.eventDuration”调用生成时错误:“编译器无法在合理的时间内键入check此表达式…”。非常感谢您的帮助


导入快捷界面
导入CoreData
结构AdminEventsLog:视图{
@环境(\.managedObjectContext)变量managedObjectContext
@FetchRequest(实体:Event.entity(),SortDescriptor:[NSSortDescriptor(keyPath:\Event.eventDate,升序:true)])var事件:FetchedResults
var dateFormatter:dateFormatter{
let formatter=DateFormatter()
formatter.dateStyle=.short
返回格式化程序
}
@状态变量showEventLogging=false
@状态变量totalHours:Int16=0
var totalDuration:Int16=0
var body:一些观点{
名单{
ForEach(events){event in
let duration=convertDuration(duration:event.eventDuration)//转换整数
totalDuration+=event.eventDuration
VStack{
HStack{
文本(“日期:”)
.bold()
+文本(\(self.dateFormatter.string(from:event.eventDate!))
+(正文(“详情:))
.bold()
+文本(\(event.eventDetails!))
+文本(“Dur:”).bold()
+文本(“\(持续时间)”)
+文本(“小时:分钟”)
}
HStack{
文本(“类别:”).bold()
+文本(\(event.eventCategory!))
}
}.font(.footnote)
}
.onDelete{indexSet in
用于索引集中的索引{
self.managedObjectContext.delete(self.events[index])
}
}
}
.navigationBarTitle(“日志:\(转换持续时间(持续时间:totalHours)))
.navigationBarItems(尾部:按钮(操作:{
self.showEventLogging=true
打印(“打开订单”)
},标签:{
图像(系统名称:“plus.circle”)
.可调整大小()
.框架(宽度:30,高度:30,对齐:。中心)
})).sheet(显示:$showEventLogging){
EnterEvent().environment(\.managedObjectContext,self.managedObjectContext)
}
}
}
结构AdminEventsLog\u预览:PreviewProvider{
静态var预览:一些视图{
让上下文=(UIApplication.shared.delegate为!AppDelegate)。persistentContainer.viewContext
返回AdminEventsLog().environment(\.managedObjectContext,context)
}
}

ForEach
视图与for each循环不同

根据您拥有的数据,使用另一个计算出的特性,而不是body特性计算总计:

var totalDuration: Int {
   events.reduce(0, { $0 + $1.eventDuration })
}
然后您可以在视图中使用它:

var body: some View {
   // ...

   Text("\(totalDuration)")

   // ...
}