swift - 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
功能线。
解决方案
你来做这件事 :
init () {
dataSource = fetchDataSource()
}
填充你的数据源 - > 并在 fetch... 你在填充数据源之前(!)使用自我。这是不允许的。您可以将 dataSource 声明为 Optional,也可以在 init 中将其填空。
在一个类中,必须先填充类本身的所有变量,然后才能使用“self”。