答案 0 :(得分:2)
这是一个简单的修复。将数组传递给List
时,数组中的元素需要符合Identifiable
协议。 String
不符合Identifiable
,因此进行这项工作的方法是像这样使用.identified(by:)
:
struct StringList: View {
let strings = ["1234", "5678"]
var body: some View {
List(strings.identified(by: \.self)) { string in
Text(string)
}
}
}
您还可以在ForEach
内使用List
:
struct StringList: View {
let strings = ["1234", "5678"]
var body: some View {
List {
ForEach(strings.identified(by: \.self)) { string in
Text(string)
}
}
}
}
这两个示例均实现了相同的输出,但第一个示例更简洁,需要的代码更少。
从Xcode Beta 4开始,为了支持identified(by:)
和List
的特定初始化器,已弃用ForEach
:
struct StringList: View {
let strings = ["1234", "5678"]
var body: some View {
List(strings, id: \.self) { string in
Text(string)
}
}
}
struct StringList: View {
let strings = ["1234", "5678"]
var body: some View {
List {
ForEach(strings, id: \.self) { string in
Text(string)
}
}
}
}