微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在视图模型中使用数组

如何解决在视图模型中使用数组

我在视图模型中有一个数组。我无法弄清楚如何用伪数据初始化它,以便以后可以访问数组的任何元素。每次加载视图时,数组中的元素数量都会改变,因此我无法在视图模型中使用“重复”进行初始化。

我尝试从.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 举报,一经查实,本站将立刻删除。