如何解决SwiftUI-如何创建和使用自定义类型的数组
我正在尝试创建一个包含我的struct Element的数组。尝试使用.append时出现两个错误。
“不能在不可变值上使用变异成员:'自身'是不可变的”和“不能将类型为“元素”的值转换为预期的参数类型为“ [元素]””
我显然做错了所有事情。
我的测试代码:
var elements = [[Element]]()
var body: some View {
vstack {
ForEach (0..<26) { index in
Text("\(index) Hello,World!")
elements.append(Element(direction: "Direction \(index)",movement: "Movement \(index)",multiplier: index))
}
}
}
}
struct Element {
var direction: String
var movement: String
var multiplier: Int
}
解决方法
您无法在ForEach内部执行任何操作。 ForEach期望从中返回单个View。但是,如果要在ForEach内附加数据,则可以在ForEach内的View上调用onAppear()闭包时执行此操作。
这是将elements数组添加到View的onAppear中后的代码。
VStack {
ForEach (0..<26) { index in
Text("\(index) Hello,World!").onAppear() {
elements.append(Element(direction: "Direction \(index)",movement: "Movement \(index)",multiplier: index))
}
}
}
您将得到“不可变的错误”,因为您可能声明了该结构内的 elements 变量,并且该结构内的属性是不可变的。因此,要附加新值,您要么需要使用 @State 注释 elements 变量,要么可以在结构外部声明它
在结构声明之外:
var elements: [Element] = []
struct MyView: View {
}
带有注释,但在结构声明中:
struct MyView: View {
@State var elements: [Element] = []
}
您还需要知道,更改@State注释属性的值会更新UI,但这不必担心,因为SwiftUI计算UI中的更改并仅更新新更改
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。