SwiftUI中的ForEach出现了一个奇怪的问题。
这是问题:Unable to infer complex closure return type; add explicit type to disambiguate
。
如果我删除ForEach并且仅使用列表,则可以使用,但是我需要ForEach,因为我想实现.onDelete()修饰符
struct SummaryItemsListView: View {
var items: [CalendarItem]
var body: some View {
List {
ForEach(items, id: \.self) { item in
// if 1 > 0 {
Text("hey")
} else {
Text("heu")
}
}
}
.foregroundColor(Color.AgendaColors.foreground)
}
}
import EventKit
typealias CalendarItem = EKCalendarItem
extension EKCalendarItem: Identifiable {
public var id: Int {
return self.hash
}
var isTodo: Bool {
return self is EKReminder
}
var isEvent: Bool {
return self is EKEvent
}
}
答案 0 :(得分:0)
像这样明确声明返回类型,
ForEach(items, id: \.self) { item -> Text in
答案 1 :(得分:0)
对编译器有所帮助:
List(items, id: \.self) { item in
if 1 > 0 {
Text("hey")
} else {
Text("heu")
}
}
合并List
和ForEach
有助于检测返回类型。
如果您需要诸如onDelete
之类的特定修饰符,并且需要使用ForEach
(如您在注释中所述),则必须确保编译器有关返回类型。您可以使用?:
运算符来实现此目的:
List {
ForEach(items, id: \.self) { item in
1 > 0 ? Text("hey") : Text("heu")
}
.onDelete { print($0) }
}
答案 2 :(得分:0)
这是因为它被您的条件语句弄糊涂了。而是将其包装在Group
中。
List {
ForEach(items, id: \.self) { item in
Group {
if 1 > 0 {
Text("hey")
} else {
Text("heu")
}
}
}
}
我认为您实际上将在将来使用条件语句,而不仅仅是检查始终为true
的语句。同样正如Mojtaba所述,您可以将ForEach
合并到List
语句中。