2016-06-10 35 views
5

RxSwift kullanmaya başladığımda, BaseViewController oluşturmak ve RxSwift kullandığım tüm denetleyicilerimle genişletmek için kullanılır. BaseViewController.swift kod:Nasıl Kullanılır RxSwift ile projede tek kullanımlık ürünler doğru mu?

class BaseViewController: UIViewController { 
var mSubscriptions: CompositeDisposable? 

func addSubscription(subscription: Disposable){ 
    if(mSubscriptions == nil){ 
     mSubscriptions = CompositeDisposable() 
    } 
    if let mSub = mSubscriptions{ 
     mSub.addDisposable(subscription) 
    } 
} 

func unsubscribeAll(){ 
    if let mSub = mSubscriptions{ 
     mSub.dispose() 
     mSubscriptions = nil 
    } 

} 

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 
    unsubscribeAll() 
} 

deinit{ 
    unsubscribeAll() 
} 
} 

Ve AddSubscription kullanmak (: _) Çocuğum kontrolörleri her yerde yöntemi. Örneğin gelen kodu parçasıdır:

class TasksViewController: BaseViewController{ 
    overrided func viewWillAppear(){ 
     //... 
    var subscribe = dataLoader.load(requestNetwork, dataManager: taskDataManager) 
    .observeOn(ConcurrentDispatchQueueScheduler(queue: queue)) 
    .subscribe({ (event) -> Void in 
     //... 

    }) 
    addSubscription(subscribe!) 
    } 
} 

Ben BaseViewController ne kullanmıyorsanız ve sadece bu disposeBag için tüm abonelikler her denetleyicisi DisposeBag() bir örneğini oluşturmak ve eklemek? Tek kullanımlık malzemeyi nasıl düzeltmeliyim?

cevap

8

Görüntü denetleyicilerinize let disposeBag = DisposeBag() özelliğini ekleyebilirsiniz. Disposable s ekleyerek yapmanız gereken tek şey budur. DisposeBag, disposeDisposableDisposeBag (UIViewController serbest bırakıldığında gerçekleşecek) için ayrılan sizin için olacaktır. Manüel olarak yönetmeye gerek yok. kullanmak sonra

class BaseViewController: UIViewController { 
    let disposeBag = DisposeBag() 
} 

Ve:

Ancak, isterse bir alt sınıfı kullanmaya devam edebilirsiniz

override func viewDidLoad() { 
    super.viewDidLoad() 

    Observable.just(42) 
     .subscribeNext { i in 
      print(i) 
     } 
     .addDisposableTo(disposeBag) 
} 

Bu ViewController taban sınıfı RxExample ne yaptığını aslında:

property in ViewController

Usage in a subclass

(eğer unsubscribeAll ile yaptıklarını gibi) aslında her şeyi manuel ayırması mümkün isteyen ediyorsanız, o zaman sadece ayarlayabilirsiniz o ayırmanın alır böylece nil veya yeni DisposeBag için disposeBag: disposeBag = DisposeBag() veya disposeBag = nil.

+0

Çok teşekkür ederim. Belki de RxSwift ile ilgili bazı eğitimlere tavsiyede bulunabilirsiniz? Çünkü bu konuda az bilgi var. – Marina

+0

Kesinlikle Yea. "RxExample" adlı RxSwift yanıtında örnek uygulamaya bakın. Sadece simülatörde çalıştırın. Ayrıca, RxSwift repo, çoğu operatörün küçük örneklerine sahip bazı harika Oyun Sayfalarına sahiptir. – solidcell

+0

@Marina Bu seri, RxSwift'e 4 yazıyla http://www.thedroidsonroids.com/blog/ios/rxswift-by-examples-1-the-basics/ adresinde mükemmel bir giriş niteliğindedir. –

İlgili konular