不建议使用SwiftUI ForEach'identified(by :)'。使用ForEach(_:id :)或List(_:id :)

时间:2019-07-19 09:31:10

标签: swiftui

在XCode 11 beta 4上,以下内容似乎已被弃用,我不知道该如何重写。有人知道如何使用ForEach(_:id:)吗?

@State private var showTargets = [
    (id: 1, state: false, x: 109.28, y: 109.28),
    (id: 2, state: false, x: 683, y: 109.28),
    (id: 3, state: false, x: 1256.72, y: 109.28)
]

...

var body: some View {
    HStack {

        ForEach(showTargets.identified(by: \.id)) { item in
            Text(String(item.x))

        }
}

3 个答案:

答案 0 :(得分:5)

我还没有下载Xcode Beta 4,但是根据documentation,它应该类似于:

ForEach(showTargets, id: \.id) { item in
    Text(String(item.x))
}

答案 1 :(得分:0)

为列表添加示例

List(showTargets, id: \.id) { item in
     ItemRow(item: item)
 }

当showTargets符合可识别的协议时:

List(showTargets) { item in
     ItemRow(item: item)
 }

答案 2 :(得分:0)

如果您的列表对象符合可识别的协议,并且内部具有id(唯一定义)变量以及对象的其他属性。

您可以通过不传递id:参数来简单地遍历列表。

List(showTargets) { item in
 Text(String(item.x))
}

否则,您可以简单地使用ForEach进行迭代:

List(showTargets, id: \.id) { item in
 Text(String(item.x))
}

结帐很少参考文档: Identifiable Documentation