2016-02-25 11 views
5

मुझे लगता है कि मैं सभी टुकड़ों को एक साथ जोड़ने के तरीके को समझकर, प्रतिक्रियाशील कोको (अवधारणात्मक रूप से) के सभी बुनियादी घटकों को समझता हूं, अभी भी थोड़ा उलझन में है।सिग्नल उत्पादक सिग्नल क्यों नहीं लौटाता है?

उदाहरण के लिए, सिग्नल के बारे में पढ़ने के बाद, मैं पूरी तरह से SignalProducer की उम्मीद सिर्फ एक शुरुआत() विधि है जो एक सिग्नल, जो तुम इतनी तरह का प्रयोग करेंगे लौटे है: इसके बजाय

mySignalProducer.start().observe(myObserver) 

, आप एक पारित करने के लिए है) शुरू में पर्यवेक्षक (और SignalProducer कॉल() आप के लिए पर ध्यान दें:

mySignalProducer.start(myObserver) 

इसका मतलब है कि SignalProducer के इंटरफेस (अधिक समझने के लिए) बहुत बड़ा है, क्योंकि निरीक्षण में बदलाव के सभी() होना जरूरी प्रारंभ() पर डुप्लीकेट (जैसे startNext(), आदि)।

मुझे लगता है कि यहां दो संभावनाएं देखते हैं:

  1. वहाँ तकनीकी वजहों (शुरू कर रहे हैं) बस एक सिग्नल
  2. वापस नहीं लौट सकते मैं SignalProducer धारणात्मक नहीं समझ पाते, इसके इंटरफेस
  3. की wonky उम्मीदों के लिए अग्रणी

यदि 1 मामला है, तो मुझे लगता है कि स्मृति प्रबंधन और डिस्पोजेबल के साथ ऐसा कुछ है जो मैं अभी तक पूरी तरह से समझ नहीं पा रहा हूं।

मुझे और अधिक चिंता है कि 2 मामला है। आंतरिक रूप से, SignalProducer की मेरी समझ मूल रूप से, एक फैक्टरी की अवधारणा के लिए मैप किया गया है उदा .:

mySignalFactory.createSignal().observe(myObserver) 

जिसके कारण मैं हैरान हम जो एक सिग्नल देता है एक शुरुआत() नहीं मिल रहा है कर रहा हूँ।

यदि समुदाय यहां कुछ प्रकाश डाल सकता है तो मुझे बहुत सराहना होगी।

धन्यवाद!

उत्तर

5

मुझे लगता है कि मुख्य कारण यह है कि जब निर्माता शुरू होता है तो कुछ घटनाएं तुरंत भेजी जा सकती हैं।

उदाहरण के लिए

, आप शुरू श्रृंखला इंटरफेस पसंद नहीं करते हैं, और एक संकेत सीधे प्राप्त करने के लिए जब शुरू करना चाहते हैं:

extension SignalProducer { 
    func getSignalFromStart() -> Signal<Value, Error> { 
     var signal: Signal<Value, Error>! 
     startWithSignal{ innerSignal, _ in 
      signal = innerSignal 
     } 
     return signal 
    } 
} 

तो फिर तुम कुछ घटनाओं को याद कर सकते हैं। इसे आज़माएं:

// When property.producer starts, it will send its current value immediately 
let property = MutableProperty(1) 

property.producer.getSignalFromStart().observeValues { value in 
    print("getSignalFromStart \(value)") // maybe not what you want, only gets 2 
} 

property.producer.startWithValues { value in 
    print("normal start \(value)") // this normally gets 1 and 2 
} 

property.value = 2 
संबंधित मुद्दे