私は(私が思うもの)一般的なシナリオでなければなりません。Observableを配列Observable内で結合する
子ビューモデルを持つViewModelがあります。両方(親と子)には、元の状態に対して変更があったかどうかを反映するためにObservable<Bool>
があります。
コードは次のようになります。これはParentViewModel
持って変更を除いて、正常に動作します
class ParentViewModel {
var children = Variable<[ChildViewModel]>([])
var hasChanges: Observable<Bool> {
return Observable.combineLatest(children.value.map { $0.hasChanges })
.map { (boolArray) in
boolArray.reduce(false) { $0 || $1 }
}
}
}
class ChildViewModel: CustomStringConvertible {
let title: Variable<String>
private let originalValue: String
var hasChanges: Observable<Bool> {
return title.asObservable()
.map { $0 != self.originalValue }
}
init(string: String) {
title = Variable<String>(string)
originalValue = string
}
var description: String {
return "\(type(of: self)) - \(title.value)"
}
}
それはないですので、children.value
から値を結合された真Observable
(私はhasChanges
の結合後ChildViewModel
を追加する場合、それ考慮されません)。私が欲しいもの
はParentViewModel
hasChanges
がhasChanges
が同様に真であるtrue
もしあれば、それのだ子供になることです。
children.asObservable()
.flatMap { Observable.from($0) }
.flatMap { $0.hasChanges }
これは、すべての変更があった最後の子の最新の値を返しますが、2人の子供が元の値に変更し、1つのリターンを持っている場合、それは作る:
もう一つは、次のように見える、試行が失敗しましたそれはfalse
を返すが、これは私が必要とするものではない。