Việc triển khai rx cung cấp BehaviorSubject<T>
và Variable<T>
làm cơ chế để mô hình hóa các thuộc tính thay đổi theo thời gian (một thay thế hữu ích cho C# INotifyPropertyChanged).Giao diện BehaviorSubject chỉ đọc có tồn tại trong RX hay không, có phải là một ý tưởng tồi để tạo một giao diện không?
Nói chung chúng được tiếp xúc như Observable<T>
nhưng nó sẽ hữu ích hơn để vạch trần tính chất như một cái gì đó như:
class ObservableValue<T> : Observable<T>{
var currentValue:T { get }
}
này có thể được tạo ra dọc theo những dòng trong nhanh chóng:
class ObservableValue<Element> : ObservableType {
typealias E = Element
private let subject:BehaviorSubject<E>
var currentValue:E {
get {
return try! subject.value()
}
}
init(subject:BehaviorSubject<E>) {
self.subject = subject
}
func subscribe<O: ObserverType where O.E == E>(observer: O) -> Disposable {
return self.subject.subscribe(observer)
}
}
Điều này đã tồn tại chưa? và nếu không phải là nó bởi vì nó chống lại các mục tiêu của Rx?
Cách duy nhất xung quanh nó là phơi bày một giá trị hiện tại riêng biệt hoặc ghi người tiêu dùng giả định việc triển khai cụ thể đằng sau Quan sát được phơi sáng là một BehaviourSubject hoặc một nơi nào đó trong chuỗi replay() đã xảy ra, ví dụ: đoạn sau không làm cho nó rõ ràng rằng ngay sau khi tôi đăng ký tôi sẽ nhận được một giá trị:
class MyViewModel {
// 'I will notify you of changes perhaps including my current value'
myProperty:Observable<String>
}
do đó, mã đã được viết như thể 'không đồng bộ' của nó với một giả định cơ bản nó sẽ hoạt động trong một gần như cách đồng bộ thay vì:
class MyViewModel {
// 'I have a current value and will notify you of changes going forward'
myProperty:ObservableValue<String>
}
Điều đó sẽ làm việc trong Rx.NET vì bạn có INotifyPropertyChanged nhưng trong nhanh chóng bạn không (gần nhất là KVO mà chỉ là trên lớp con NSObject). Ngoài ra tôi không chắc tôi thích ý tưởng phơi bày một get/set, một INotifyPropertyChanged và một Observable ở đâu đó - nếu tôi đang tạo viewmodel tại sao tôi không làm thẳng nó với các quan sát thay vì trộn các hệ thống sự kiện. – Cargowire