为啥我在 Xcode 11 Beta 5 中使用 ForEach 时会出错?
Posted
技术标签:
【中文标题】为啥我在 Xcode 11 Beta 5 中使用 ForEach 时会出错?【英文标题】:Why do I get error when I use ForEach in Xcode 11 Beta 5?为什么我在 Xcode 11 Beta 5 中使用 ForEach 时会出错? 【发布时间】:2019-08-04 13:16:37 【问题描述】:错误信息:
无法推断通用参数“ID”
ForEach(0...self.workoutsViewModel.workoutRoutine[self.workoutIndex].routine[0].exercises.count - 1) x in
Text("\\(x)")
【问题讨论】:
信息太少了,任何人都无法帮助您。 【参考方案1】:您作为ForEach
的第一个参数传递的集合中的元素必须符合Identifiable
,或者您必须使用不同的初始化程序来指定元素上id 的KeyPath
。例如,以下代码无法编译:
struct MyModel
let name: String
struct ContentView: View
let models: [MyModel]
var body: some View
ForEach(models) model in
Text(model.name)
models
数组不满足ForEach
初始化器的要求,即其元素不符合Identifiable
。我可以通过以下两种方式之一解决这个问题:
1.) 扩展MyModel
以符合Identifiable
:
extension MyModel: Identifiable
// assuming `name` is unique, it can be used as our identifier
var id: String name
2.) 使用 ForEach
上的便利初始化程序,它允许您为标识符指定 KeyPath
:
var body: some View
ForEach(models, id: \.name) model in
Text(model.name)
【讨论】:
【参考方案2】:@daltonclay*** 的回答非常棒,因为它解释了您遇到该错误的原因,并说明了创建自定义模型的正确方法。但是,如果您正在寻找一个临时、快速和肮脏的解决方案,这对我在 Xcode 11.2.1 和 ios 13.2 中适用于 String
数组:
ForEach(strings, id: \.self) string in
...
【讨论】:
以上是关于为啥我在 Xcode 11 Beta 5 中使用 ForEach 时会出错?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在 xcode 6 beta 中得到“必须将自动调整大小掩码转换为约束才能拥有 _setHostsLayoutEngine:YES”
Xcode 11 beta:AppDelegate 文件没有窗口全局变量
如何打开 .plist 文件作为源代码 xcode 11 beta 5
.send() 和 .sink() 似乎不再适用于 Xcode 11 Beta 5 中的 PassthroughSubject
Xcode 11 beta 3 在同时使用 NavigationLink、@EnvironmentObject 和 List 时崩溃