【问题标题】: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)")

}

【问题讨论】:

  • 信息太少了,任何人都无法帮助您。

标签: swift xcode swiftui xcode11 ios13


【解决方案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】:

    @daltonclaybrook 的回答非常棒,因为它解释了您遇到该错误的原因,并说明了创建自定义模型的正确方法。但是,如果您正在寻找一个临时、快速和肮脏的解决方案,这对我在 Xcode 11.2.1 和 iOS 13.2 中适用于 String 数组:

    ForEach(strings, id: \.self) { string in
       ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 2019-10-30
      • 1970-01-01
      • 2019-12-19
      • 2021-03-04
      • 2010-10-18
      • 2021-10-02
      相关资源
      最近更新 更多