आरएक्स के कार्यान्वयन BehaviorSubject<T>
और Variable<T>
प्रदान करते हैं जो मॉडलिंग गुणों के लिए तंत्र के रूप में समय के साथ बदलते हैं (सी # INotifyPropertyChanged के लिए एक उपयोगी प्रतिस्थापन)।क्या आरएक्स में केवल एक व्यवहार सिब्जेक्ट इंटरफेस मौजूद है और यदि नहीं, तो क्या यह एक बुरा विचार है?
आम तौर पर इन Observable<T>
के रूप में संपर्क में हैं लेकिन यह की तरह कुछ के रूप में गुण का पर्दाफाश करने के लिए और अधिक उपयोगी होगा:
class ObservableValue<T> : Observable<T>{
var currentValue:T { get }
}
इस तेजी में इन पंक्तियों के साथ बनाया जा सकता है:
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)
}
}
क्या यह पहले से मौजूद है? और यदि ऐसा नहीं है क्योंकि यह आरएक्स के उद्देश्य के खिलाफ है?
इसके आस-पास एकमात्र तरीका एक अलग वर्तमान वैल्यू का पर्दाफाश करना है या उपभोक्ताओं को लिखना है जो उजागर वेधशाला के पीछे ठोस कार्यान्वयन मानते हैं, एक बेहेविरसब्जेक्ट या श्रृंखला में कहीं एक रीप्ले() होता है उदा।
class MyViewModel {
// 'I will notify you of changes perhaps including my current value'
myProperty:Observable<String>
}
तो कोड के रूप में अगर अपनी 'अतुल्यकालिक' लिखा होना चाहिए है एक अंतर्निहित धारणा के साथ लगभग एक में कार्य करेगा: निम्नलिखित स्निपेट यह स्पष्ट है कि जैसे ही मैं सदस्यता मैं एक मूल्य मिल जाएगा नहीं है तुल्यकालिक ढंग के बजाय:
class MyViewModel {
// 'I have a current value and will notify you of changes going forward'
myProperty:ObservableValue<String>
}
यह आरएक्स.नेट में काम करेगा क्योंकि आपके पास INotifyPropertyChanged है लेकिन तेजी से आप नहीं (निकटतम केवीओ है जो केवल एनएसओब्जेक्ट उप-वर्गों पर है)। मुझे यह भी यकीन नहीं है कि मुझे एक गेट/सेट, एक इंटोटिफाप्रॉपर्टी चेंज और एक अवलोकन करने योग्य व्यक्ति को उजागर करने का विचार पसंद है - अगर मैं व्यूमोडेल बना रहा हूं, तो मैंने इसे इवेंट सिस्टम के बजाए अवलोकन के साथ सीधे क्यों नहीं बनाया है। – Cargowire