[英]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.