ForEach循环中的调用函数

My4Paws

我只想计算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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章