SwiftUI - 形状导致反向数组访问
Posted
技术标签:
【中文标题】SwiftUI - 形状导致反向数组访问【英文标题】:SwiftUI - Shape causes reverse array access 【发布时间】:2021-07-08 21:38:23 【问题描述】:试图理解为什么在ForEach
中使用Shape
会导致数组的反向迭代。示例:
var body: some View
ForEach(0...10,id:\.self) index in
TestShape()
struct TestShape:Shape
func path(in rect: CGRect) -> Path
return Path()
如果您每次通过都检查index
,它将从 10 开始并向后工作。但是,如果不是调用TestShape
,而是说Text("test")
,则索引将从0 开始并逐渐上升。所以这里的关键区别在于对形状的调用。为什么会这样?
【问题讨论】:
“如果你每次都检查索引”你是如何检查它的? 断点或打印语句。 嗯,不用担心这个,让ForEach
自己做吧。它的循环顺序不应该影响你的代码(如果是这样,你可能做错了什么)
谢谢,但这不是我的问题。我的问题是寻求理解这种行为。
好吧,但无论如何,SwiftUI 的大部分内部行为都是一个谜。它是封闭源代码,所以我们几乎只能猜测。
【参考方案1】:
这是我用来证明索引没有反转的测试:
import SwiftUI
@main
struct TestApp: App
var body: some Scene
WindowGroup
ContentView()
struct TestShape:Shape
func path(in rect: CGRect) -> Path
return Path()
struct ContentView: View
var body: some View
ForEach(0...10,id:\.self) index in
let _ = print("---> index: \(index)")
TestShape()
输出是:
--->索引:0
---> 索引:1
---> 索引:2
---> 索引:3
---> 索引:4
---> 索引:5
---> 索引:6
---> 索引:7
---> 索引:8
--->索引:9
---> 索引:10
【讨论】:
以上是关于SwiftUI - 形状导致反向数组访问的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI ListView 没有访问 ForEach 循环
检查 JSON 数组中是不是存在值,如果不存在则检查下一个数组(Swift / SwiftUI)