我只想计算ForEach循环中适合“ if”语句的事件数,但是却收到以下错误。
我尝试了几种变体来完成任务,但是每种变体都导致一些描述错误。我还要补充一点,我是一个苦苦挣扎的新手!
类型'()'不符合'视图'; 只有struct / enum / class类型可以符合协议
我现在正在使用的代码。
import Foundation
import SwiftUI
import EventKit
class Summary: ObservableObject {
@Published var walkCount:Int = 0
@Published var dayCareCount:Int = 0
@Published var shortStayCount:Int = 0
@Published var longStayCount:Int = 0
@Published var dropInCount:Int = 0
}
struct SummaryView: View {
@ObservedObject var eventsRepository = EventsRepository.shared
@ObservedObject var selectDate = datepicker()
var summary: Summary
enum BookingType {
case walk
case dayCare
case shortStay
case longStay
case dropIn
}
func countBooking(bookingType: BookingType) {
switch bookingType {
case .walk:
summary.walkCount += 1
case .dayCare:
summary.dayCareCount += 1
case .shortStay:
summary.shortStayCount += 1
case .longStay:
summary.longStayCount += 1
case .dropIn:
summary.dropInCount += 1
}
}
var body: some View {
GroupBox {
VStack{
//Walks
HStack{
ForEach(eventsRepository.events ?? [], id: \.self) { event in
if event.title.contains("Walk") {
countBooking(bookingType: .walk) // running function results in error
}
}
Text("Walks:\(summary.walkCount)")
}
}
}
}
}
ForEach
旨在用于构建重复内容,body
仅用于定义您的内容,View
而不用于执行任何计算。
计算步行次数的最简单方法是在SummaryView中但在外部声明一个计算属性body
:
var walksCount: Int {
eventsRepository.events?
.filter { $0.title.contains("Walk") }
.count ?? 0
}
然后,您可以body
像下面这样在内部使用它:
Text("Walks:\(walksCount)")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句