获取错误:初始化所有存储属性之前在方法调用'getliveData'中使用 self'



我无法删除此错误。我以前使用过这个函数,没有遇到任何问题,甚至看过一些教程,其中完成了这个结构,编译器没有抱怨,但由于某种原因,这种情况一直在发生,我不知道为什么。我只是想找个。来自Firestore的文档。

import SwiftUI
import Firebase
import Foundation

class LiveStream: ObservableObject {
@Published var hptvlive: HPtvLiveData

init() {getliveData()}

func getliveData(){

let  db = Firestore.firestore()
let docRef = db.collection("HPtvLive").document("hptvlive")
docRef.getDocument{ (document, error) in
guard error == nil else {

print("error", error ?? "")
return
}
if let document = document, document.exists{

let data = document.data()
if let data = data {
print("data", data)
self.hptvlive.title = data["title"] as? String ?? ""
self.hptvlive.upnextText = data["upnextText"] as? String ?? ""
self.hptvlive.description = data["description"] as? String ?? ""
}
}


}
}


}
struct HPtvLiveData {
var title: String
var upnextText: String
var description: String
var thumbnail: URL
var poster: URL
}

我认为这里有两个问题:

  1. 您正在异步回调中设置hptvlive,因此当返回init时,该值仍未初始化,只有在稍后调用getDocument回调时才会设置。

  2. 我不确定这是你应该如何处理@Published信息。但是,将整个对象hptvlive设置为发布,并不是在检查该结构中每个字段的更改,而是在查找对该结构的引用。如果这是你想要的,那么我会写:@已发布var hptvlive:HPtvLiveData?=无

通过这种方式,您可以从对nil的引用开始,然后在其中设置一个值。

另一种选择,我认为更有可能(但同样,取决于您的视图将如何使用信息(是:

让hptvlive=HPtvLiveData((

// instead of struct use:
class HPtvLiveData : ObservableObject {
@Published var title: String = ""
@Published var upnextText: String = ""
@Published var description: String = ""
@Published var thumbnail: URL?
@Published var poster: URL?

// For easy tracking of set / not set yet
@Published var isDataAvailable = false
}

相关内容

  • 没有找到相关文章

最新更新