SwiftUI:编译器无法在合理的时间内对该表达式进行类型检查
SwiftUI: The compiler is unable to type-check this expression in reasonable time
我想从 EKEvent 获取日历颜色。但我收到错误:
编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式
Rectangle().fill 导致错误。
我如何从 calendar.cgcolor 获取 Rectangle 的 UIColor?
ForEach(0..<data.eventsByDay.prefix(4).count)
{(section) in
HStack(alignment: .bottom){
ForEach(0..<data.eventsByDay[section].prefix(3).count)
{(row) in
Rectangle().fill(UIColor(cgcgolor: data.eventsByDay[section][row].calendar.cgcolor))
.frame(width: 3, height: 26, alignment: .leading)
.cornerRadius(1.5)
.padding(.bottom, 1.0)
}
}
当 Xcode 无法确定错误的确切原因时会出现此错误。
我建议您根据错误进行以下说明
try breaking up the expression into distinct sub-expressions
您可以通过将视图的一部分移动到一个单独的函数或 View
中来做到这一点,但您也可以一个一个地注释掉块,直到您看到实际错误或直到它构建:在这种情况下,错误出现在注释行之一。
在他的例子中,你可以把两个ForEach
都注释掉,并用常量替换它们:
//ForEach(0..<data.eventsByDay.prefix(4).count)
//{(section) in
let section = 0
HStack(alignment: .bottom){
// ForEach(0..<data.eventsByDay[section].prefix(3).count)
// {(row) in
let row = 0
Rectangle().fill(UIColor(cgcgolor: data.eventsByDay[section][row].calendar.cgcolor))
.frame(width: 3, height: 26, alignment: .leading)
.cornerRadius(1.5)
.padding(.bottom, 1.0)
}
}
}
然后 Xcode 将能够告诉您您在 UIColor
初始值设定项中输入错误(cgColor
而不是 cgcgolor
),并且 fill
使用 Color
而不是 UIColor
- 第二个来自 UIKit
并且使用 SwiftUI 几乎永远不需要它。
所以固定变体看起来像:
ForEach(0..<data.eventsByDay.prefix(4).count)
{(section) in
let section = 0
HStack(alignment: .bottom){
ForEach(0..<data.eventsByDay[section].prefix(3).count)
{(row) in
let row = 0
Rectangle().fill(Color(data.eventsByDay[section][row].calendar.cgcolor))
.frame(width: 3, height: 26, alignment: .leading)
.cornerRadius(1.5)
.padding(.bottom, 1.0)
}
}
}
我想从 EKEvent 获取日历颜色。但我收到错误: 编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式 Rectangle().fill 导致错误。 我如何从 calendar.cgcolor 获取 Rectangle 的 UIColor?
ForEach(0..<data.eventsByDay.prefix(4).count)
{(section) in
HStack(alignment: .bottom){
ForEach(0..<data.eventsByDay[section].prefix(3).count)
{(row) in
Rectangle().fill(UIColor(cgcgolor: data.eventsByDay[section][row].calendar.cgcolor))
.frame(width: 3, height: 26, alignment: .leading)
.cornerRadius(1.5)
.padding(.bottom, 1.0)
}
}
当 Xcode 无法确定错误的确切原因时会出现此错误。
我建议您根据错误进行以下说明
try breaking up the expression into distinct sub-expressions
您可以通过将视图的一部分移动到一个单独的函数或 View
中来做到这一点,但您也可以一个一个地注释掉块,直到您看到实际错误或直到它构建:在这种情况下,错误出现在注释行之一。
在他的例子中,你可以把两个ForEach
都注释掉,并用常量替换它们:
//ForEach(0..<data.eventsByDay.prefix(4).count)
//{(section) in
let section = 0
HStack(alignment: .bottom){
// ForEach(0..<data.eventsByDay[section].prefix(3).count)
// {(row) in
let row = 0
Rectangle().fill(UIColor(cgcgolor: data.eventsByDay[section][row].calendar.cgcolor))
.frame(width: 3, height: 26, alignment: .leading)
.cornerRadius(1.5)
.padding(.bottom, 1.0)
}
}
}
然后 Xcode 将能够告诉您您在 UIColor
初始值设定项中输入错误(cgColor
而不是 cgcgolor
),并且 fill
使用 Color
而不是 UIColor
- 第二个来自 UIKit
并且使用 SwiftUI 几乎永远不需要它。
所以固定变体看起来像:
ForEach(0..<data.eventsByDay.prefix(4).count)
{(section) in
let section = 0
HStack(alignment: .bottom){
ForEach(0..<data.eventsByDay[section].prefix(3).count)
{(row) in
let row = 0
Rectangle().fill(Color(data.eventsByDay[section][row].calendar.cgcolor))
.frame(width: 3, height: 26, alignment: .leading)
.cornerRadius(1.5)
.padding(.bottom, 1.0)
}
}
}