【发布时间】:2021-08-03 14:16:05
【问题描述】:
当我在 HomeViewModel 中调用 getBooks() 进行初始化时,会出现此错误 ===> 在初始化所有存储的属性之前,在方法调用“getBooks”中使用“self”
这是初始化
init() {
getBooks()
filterModelObservable = searchValueBehavior
.map { $0 }
.throttle(.milliseconds(500), scheduler: MainScheduler.instance)
.distinctUntilChanged()
.withLatestFrom(homeModelSubject) { searchValue, books in
searchValue.isEmpty ? books : books.filter { $0.name.lowercased().contains(searchValue.lowercased()) }
}
}
这是 getBooks() 函数
func getBooks() {
loadingBehavior.accept(true)
let url = "https://simple-books-api.glitch.me/books"
APIServices.instance.getData(url: url, method: .get, params: nil, encoding: JSONEncoding.default, headers: nil) {[weak self] (bookModel: [Book]?, baseError: HomeBaseError?, error) in
guard let self = self else { return }
self.loadingBehavior.accept(false)
if let error = error {
//handler(false, "Error message\(error.localizedDescription.description)")
print("this is error discription\(error.localizedDescription)")
} else if let baseError = baseError {
//handler(false,baseError.error)
print(baseError.error)
} else {
guard let bookModel = bookModel else { return }
//handler(true, "Success")
if bookModel.count > 0 {
self.homeModelSubject.onNext(bookModel)
self.isTableHidden.accept(false)
} else {
self.isTableHidden.accept(true)
}
}
}
}
【问题讨论】:
-
错误在所有存储的属性被初始化之前的意思。在调用
self.getBooks之前,必须初始化所有没有默认值的属性。我猜存储的属性是filterModelObservable所以首先初始化filterModelObservable然后调用getBooks()。