我需要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