SwiftUI ForEach 'identified(by:)' 已弃用。使用 ForEach(_:id:) 或 List(_:id:)
SwiftUI ForEach 'identified(by:)' is deprecated. Use ForEach(_:id:) or List(_:id:)
在 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))
}
}
(仍在使用 Xcode 11.0 / Swift 5.1)
我还没有下载 Xcode Beta 4,但是根据 documentation,它应该是这样的:
ForEach(showTargets, id: \.id) { item in
Text(String(item.x))
}
您还可以使用符合 Identifiable
的 struct
(请注意,这不适用于元组,因为您无法添加协议一致性):
struct Targets: Identifiable {
var id: Int
var state: Bool
var x: Double
var y: Double
}
let showTargets = [
Targets(id: 1, state: false, x: 109.28, y: 109.28),
Targets(id: 2, state: false, x: 683, y: 109.28),
Targets(id: 3, state: false, x: 1256.72, y: 109.28)
]
ForEach(showTargets) { item in
Text(String(item.x))
}
为列表添加示例
List(showTargets, id: \.id) { item in
ItemRow(item: item)
}
当 showTargets 符合可识别协议时:
List(showTargets) { item in
ItemRow(item: item)
}
如果您的列表对象符合可识别协议并且内部有 id(唯一定义的)变量以及对象的其他属性。
您可以通过不传递 id: 参数来简单地遍历列表。
List(showTargets) { item in
Text(String(item.x))
}
否则,您可以简单地使用 ForEach 进行迭代:
List(showTargets, id: \.id) { item in
Text(String(item.x))
}
签出一些参考文档:
Identifiable Documentation
在 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))
}
}
(仍在使用 Xcode 11.0 / Swift 5.1)
我还没有下载 Xcode Beta 4,但是根据 documentation,它应该是这样的:
ForEach(showTargets, id: \.id) { item in
Text(String(item.x))
}
您还可以使用符合 Identifiable
的 struct
(请注意,这不适用于元组,因为您无法添加协议一致性):
struct Targets: Identifiable {
var id: Int
var state: Bool
var x: Double
var y: Double
}
let showTargets = [
Targets(id: 1, state: false, x: 109.28, y: 109.28),
Targets(id: 2, state: false, x: 683, y: 109.28),
Targets(id: 3, state: false, x: 1256.72, y: 109.28)
]
ForEach(showTargets) { item in
Text(String(item.x))
}
为列表添加示例
List(showTargets, id: \.id) { item in
ItemRow(item: item)
}
当 showTargets 符合可识别协议时:
List(showTargets) { item in
ItemRow(item: item)
}
如果您的列表对象符合可识别协议并且内部有 id(唯一定义的)变量以及对象的其他属性。
您可以通过不传递 id: 参数来简单地遍历列表。
List(showTargets) { item in
Text(String(item.x))
}
否则,您可以简单地使用 ForEach 进行迭代:
List(showTargets, id: \.id) { item in
Text(String(item.x))
}
签出一些参考文档: Identifiable Documentation