繁体   English   中英

SwiftUI 中的 ForEach:错误“在调用中缺少参数 #1 的参数”

[英]ForEach in SwiftUI: Error "Missing argument for parameter #1 in call"

我仍在尝试创建日历应用程序,但遇到了另一个我无法在线找到解决方案的问题。

Xcode 在我的代码示例的第 2 行中引发错误“调用中的参数 #1 缺少参数”。 我之前在其他地方使用过类似的代码,但是我找不到这一个的区别。

在收到错误“编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式”后,此代码之前工作并开始抛出此错误。 ,我希望修复它并且无论如何都是干净的代码。

供参考:events 是一个可选的 EKEvents 数组(因此是第一个 if),并且 selectedDate (显然)是一个 Date。

任何帮助是极大的赞赏!

if let events = events {
    ForEach(events, id: \.self) { event in
        if !event.isAllDay {
            DayViewEvent(selectedDate: selectedDate, event: event)
        }
    }
}

每次 state 更改都会调用body函数,因此需要尽可能快,因此应该已经处理了所需的数据。 因此需要在 func 或块中过滤您的事件,例如在onAppear中:

struct EventsView: View {

    @State var events = [Events]()

    var body: some View {
        ForEach(events, id: \.eventIdentifier) { event in
            DayViewEvent(event: event)
        }
        .onAppear {
            events = EventsDB.shared.events(isAllDay: false)
        }
    }
}

顺便说一句,由于您使用的是id: \.self ,因为 event 是一种引用类型,您需要确保在检索事件时,相同的事件总是返回相同的实例而不是新实例。 如果返回唯一实例,那么您需要改用作为唯一属性的 id,例如id: \.eventIdentifier

另外你应该知道,SwiftUI 的声明式语法和普通的编程不一样,ifs 和 for 循环都会产生一些非常复杂的代码,例如使用 if 时的_ConditionalContent ,请在此处阅读: https://swiftwithmajid.com /2021/12/09/structural-identity-in-swiftui/或观看 Apple 的 WWDC 视频Demystify SwiftUI

EKEvents 是可散列的吗? 使用id: \.self必须是可散列的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM