【发布时间】:2022-10-25 19:55:14
【问题描述】:
我在 SwiftUI 中有一个 ZStack,其中填充了 ForEach 提供的一些组件,如下所示:
ForEach(0..<arr.count) { i in
ZStack {
...
}
// I use i later in this code
...
}
程序就这样完美运行。
但我只想在i == 0 时才向ZStack 添加填充,所以我尝试将此修饰符添加到ZStack:.padding(.top, i == 0 ? 70 : 0)
当我尝试使用此修饰符构建它时,它失败了,但甚至没有说“构建失败”。尝试构建大约需要 5 分钟(通常需要 5 秒)然后决定崩溃。谁能解释为什么会发生这种情况以及如何在不破坏程序的情况下获得此条件填充?
【问题讨论】:
-
类型检查过多。尝试将结果(70 和 0)分别包装在 CGFloat() 中,您也许可以使其正常工作。编译器必须猜测类型的代码点越多,它在主体中的三元运算就越慢,这是臭名昭著的减速,因为主体经常试图猜测。另一种选择是将代码移动到子视图,甚至可能是视图模型,以从正文中获取计算。远离索引使用。
-
与您的问题没有直接关系,但请记住,不建议将
ForEach与这样的范围和数组一起使用,并且可能会导致运行时崩溃。如果您想要一个相对简单且更安全的替代品,请查看.enumerated()。 -
@jnpdx 如果我在没有范围的情况下需要它,我如何才能访问索引?
-
查看
.enumerated()