当我在Xcode 11 Beta 5中使用foreach时,为什么会出现错误



错误消息:

无法推断

的通用参数'id'
ForEach(0...self.workoutsViewModel.workoutRoutine[self.workoutIndex].routine[0].exercises.count - 1) { x in
    Text("\(x)")
}

您传递的集合中的元素,因为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)
    }
}

@daltonclaybrook的答案很棒,因为它解释了为什么您会遇到该错误并说明创建自定义模型的正确方法。但是,如果您正在寻找一个临时,快速且肮脏的解决方案,则在Xcode 11.2.1和iOS 13.2中为String的iOS 13.2有效:

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

相关内容

  • 没有找到相关文章

最新更新