我需要viewModel中的一些內部狀態,但也試圖遵循「無訂閱/綁定/驅動器/ ...」的理想方法,只能在Observables
之間編寫。RxSwift無訂閱/綁定/驅動器的變量組合
如何指定Variable
觀察的內容?
實施例:
private var userProfilesToFetch = Variable<[String]>([])
private var users: Variable<[User]> {
return //something that observes fetchUserProfiles() and when it emits, appends to its .value
}
private func fetchUserProfiles() -> Observable<User?> {
let reference = databaseRef.child("users")
return userProfilesToFetch.asObservable()
.filter({ $0 != [] })
.map({ $0.last! })
.flatMap({ (userId) -> Observable<User?> in
return self.service.observeAllChildren(of: reference.child(userId), by: .value)
.map({ (snapshot) -> User? in
guard let values = snapshot.value as? [String: AnyObject] else { return nil }
var user = User(dictionary: values)
user.id = snapshot.key
return user
})
})
}
如果沒有訂閱或綁定,則不會發生任何事情。觀察對象是懶惰的,除非被觀察到,否則不會做任何工作。 –
@DanielT。同意,但實現「最大關注點分離」的關鍵在於在視圖控制器中通過調用鏈接訂閱。 **事情是我無法弄清楚如何在訂閱鏈中包含'Variable' **例如,如果在我的VC中我訂閱了(A)在我的viewModel中,那麼因爲這個(A)綁定到另一個observable在其定義中,就像上面的'fetchUserProfiles()'函數一樣,它將鏈接訂閱到'userProfilesToFetch'等等。我無法弄清楚的是,如何通過指定應該遵守的內容來鏈接變量本身。 – Herakleis