首页 > 解决方案 > SwiftUI:在 ObservableObject 模型视图中使用函数初始化数据时出错

问题描述

我在获取数据并返回模型视图中声明的变量时遇到问题:

struct ExploreDataSource: Decodable {
    var places: [Place]
}

class ExploreViewModel: ObservableObject {

    var dataSource: ExploreDataSource

    init () {
        dataSource = fetchDataSource()
    }

    func fetchDataSource () -> ExploreDataSource {
        var dataSourceRes = ExploreDataSource(places: [])
        let request = URLRequest(url: URL(string: APIEndPoint.getExploreURL())!)
        URLSession.shared.dataTask(with: request, completionHandler: { data, response, err in
            guard let data = data else { return }
            do {
                let decoder = JSONDecoder()
                let resData = try decoder.decode(ExploreDataSource.self, from: data)
                DispatchQueue.main.async {
                    dataSourceRes = resData
                }

            } catch {
            }
        }).resume()
        return dataSourceRes
    }

}

错误:

'self' used in method call 'fetchDataSource' before all stored properties are initialized

init功能线。

标签: swiftswiftui

解决方案


你来做这件事 :

init () {
    dataSource = fetchDataSource()
}

填充你的数据源 - > 并在 fetch... 你在填充数据源之前(!)使用自我。这是不允许的。您可以将 dataSource 声明为 Optional,也可以在 init 中将其填空。

在一个类中,必须先填充类本身的所有变量,然后才能使用“self”。


推荐阅读