我在 SwiftUI 视图中使用 ForEach 循环,并且收到奇怪的警告。
它工作得很好,像这样:
ForEach(0..<7) { i in
// do something
}
Run Code Online (Sandbox Code Playgroud)
然后我将 7 更改为常数:
let numberOfElements = 7
ForEach(0..<numberOfElements) { i in
// do something
}
Run Code Online (Sandbox Code Playgroud)
并收到以下警告:
非常量范围:参数必须是整数字面量
我用谷歌搜索发现以下有效的解决方案:
let numberOfElements = 7
ForEach(0..<numberOfElements, id:\.self) { i in
// do something
}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道它为什么有效。为什么我必须为 ForEach 循环提供一个 ID,该 ID 有何用途?
小智 4
ForEach(0..<numberOfElements) { i in
// do something
}
Run Code Online (Sandbox Code Playgroud)
使用上面的 init 会弹出使用文字值警告的原因ForEach是因为 SwiftUI 不希望在使用 init 方法时重新渲染任何内容Range<Int>。这是已记录的要求/功能。例外是带有id:.
idSwiftUI 以及许多其他基于视图树的框架(如 React)中的可哈希问题是因为这些 UI 框架需要使用这些id来跟踪“ForEach容器视图”或任何其他“容器视图”内视图的更新,以帮助框架实现可用性能。如果您想深入了解,请观看以下WWDC 视频:Demystify SwiftUI。
| 归档时间: |
|
| 查看次数: |
2469 次 |
| 最近记录: |