अनुक्रम में एसिंक को निष्पादित करने के लिए रीएक्टिवएक्स कैसे करें - आईओएस, स्विफ्ट, एसिंक्रोनस, आरएक्स-स्विफ्ट, रेएक्टिवएक्स

मैं कैसे लाभ उठा सकता हूं ReactiveX अनुक्रम में async कॉल निष्पादित करने के लिए? यानी, पहले व्यक्ति के समाप्त होने के बाद दूसरी कॉल निष्पादित करें।

अधिक विशेष रूप से, मैं साथ काम कर रहा हूँ RxSwift आईओएस में, और asyncs मैं एक साथ श्रृंखला करना चाहता हूँ UIView एनिमेशन (अंदर दूसरी एनीमेशन कॉल करने के बजाय completion पहले के ब्लॉक)।

मुझे पता है कि मेरे पास अन्य विकल्प हैं आसान एनिमेशन, लेकिन मैं आरएक्स का लाभ उठाना चाहता हूं, क्योंकि मैं पहले से ही स्ट्रीम के लिए इसका उपयोग कर रहा हूं।

इसके अलावा, एक समाधान होगा (3 जंजीर एनिमेशन के लिए):

_ = UIView.animate(duration: 0.2, animations: {
sender.transform = CGAffineTransformMakeScale(1.8, 1.8)
})
.flatMap({ _ in
return UIView.animate(duration: 0.2, animations: {
sender.transform = CGAffineTransformMakeScale(0.8, 0.8)
})
})
.flatMap({ _ in
return UIView.animate(duration: 0.2, animations: {
sender.transform = CGAffineTransformIdentity
})
})
.subscribeNext({ _ in })

लेकिन मैं कुछ और सुरुचिपूर्ण, आरएक्स के साथ ऐसा करने का सही तरीका ढूंढ रहा हूं।

उत्तर:

जवाब के लिए 2 № 1

मैं उपयोग नहीं सोचता Rx यह बहुत साफ बनाता है, लेकिन यहां "आप इसे कैसे कर सकते हैं:

let animation1 = Observable<Void>.create { observer in
UIView.animateWithDuration(0.2,
animations: {
// do your animations
}, completion: { _ in
observer.onCompleted()
})
return NopDisposable.instance
}

let animation2 = Observable<Void>.create { observer in
UIView.animateWithDuration(0.2,
animations: {
// do your animations
}, completion: { _ in
observer.onCompleted()
})
return NopDisposable.instance
}

Observable.of(animation1, animation2)
.concat()
.subscribe()
.addDisposableTo(disposeBag)

यदि आप निर्माण करने के लिए कोई फ़ंक्शन बनाते हैं तो यह क्लीनर भी होगा Observable<Void>तुम्हारे लिए है

func animation(duration: NSTimeInterval, animations: () -> Void) -> Observable<Void> {
return Observable<Void>.create { observer in
UIView.animateWithDuration(duration,
animations: animations,
completion: { _ in
observer.onCompleted()
})
return NopDisposable.instance
}

मुझे लगता है कि उपयोग करने के लिए एक प्लस पक्ष Rx बस के बजाय animateWithDuration:animations: जंजीर है, यह है कि आपको पूर्णता ब्लॉक में एनिमेशन को घोंसला नहीं करना पड़ेगा। इस तरह, आप उन्हें स्वयं ही परिभाषित कर सकते हैं और बाद में लिख सकते हैं जैसे आप चाहते हैं।

एक विकल्प के रूप में RxSwift, चेक आउट PromiseKit। आपकी एनीमेशन कॉलबैक आवश्यकताओं के लिए RxSwift थोड़ा अधिक है। यह ब्लॉग पोस्ट विशेष रूप से प्रासंगिक है।


उत्तर № 2 के लिए 1

हो सकता है कि यह @ रोड्रिगो रुइज़ के लिए बहुत देर हो चुकी है, लेकिन मुझे यकीन है कि यह इस पोस्ट में आने वाले अन्य डेवलपर्स की मदद कर सकता है (जैसे मैंने किया)।

RxAnimated गिटहब पर मुफ्त में उपलब्ध है: https://github.com/RxSwiftCommunity/RxAnimated

आप इसका उपयोग शुरू कर सकते हैं ब्लॉग पोस्ट

एक छोटा सा खुलासा - मैं इस परियोजना या किसी भी तरह से पोस्ट से जुड़ा नहीं हूं - मैंने अपने एनिमेशन के लिए एक प्रतिक्रियाशील समाधान की खोज करते समय इसे अभी पाया है :)


संबंधित सवाल
सबसे लोकप्रिय