如何解决在视图模型中使用数组
我在视图模型中有一个数组。我无法弄清楚如何用伪数据初始化它,以便以后可以访问数组的任何元素。每次加载视图时,数组中的元素数量都会改变,因此我无法在视图模型中使用“重复”进行初始化。
我尝试从.onAppear调用函数以将元素追加到数组,但是.onAppear似乎在加载视图后运行,因此尝试访问数组时出现错误。
我显然做错了,
我的视图模型是:
class Demoviewmodel: ObservableObject {
@Published var array = [0]
}
我的看法是:
@Observedobject private var demoviewmodel = Demoviewmodel()
// This changes every time the view is called from it's parent
var numberOfItemsInArray = 10
var body: some View {
List(0..<numberOfItemsInArray) { index in
Text("Hello,World! - \(index)")
// demoviewmodel.array[index] = 1
// causes an error
}
}
解决方法
您可以在初始化中将numberOfItemsInArray
变量传递给DemoViewModel
,因此可以使用Array(repeating:count:)
:
class DemoViewModel: ObservableObject {
@Published var array: [Int]
init(numberOfItemsInArray: Int) {
array = Array(repeating: 0,count: numberOfItemsInArray)
}
}
并像这样初始化DemoViewModel
:
struct ContentView: View {
@ObservedObject private var demoViewModel: DemoViewModel
init(numberOfItemsInArray: Int = 10) {
demoViewModel = DemoViewModel(numberOfItemsInArray: numberOfItemsInArray)
}
var body: some View {
List(0 ..< demoViewModel.array.count) { index in
Text("Hello,World! - \(index)")
}
}
}
此外,如果您使用的是SwiftUI 2,请考虑使用@StateObject
而不是@ObservedObject
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。