2016-03-23 14 views
1

ReactiveCocoa'yı Objective-C'de kullandım, ancak RAC4'ten daha kolay anlaşılacağı için RxSwift'e geçtim. Ancak faydalı oldu RAC yapmak için kullanılan bir şey var:Nesneyi RxSwift eylemine gönder Eylem

@weakify(self); 
[[RACCommand alloc] initWithEnabled:RACObserve(self, valid) signalBlock:^RACSignal *(id input) { 
    @strongify(self); 
    return [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { 

     //make network call 

     //send responseObject to subscriber 
     [subscriber sendNext:responseObject]; 

     [subscriber sendCompleted]; 
     return nil; 
    }] materialize]; 
}]; 

Bu benim çağrısından döndürülen verileri gözlemlemek böylece o devlet yürütme yanı sıra yürütme sinyalleri oluyor benim için komuta abone izin .

Bunu RxSwift Eylemi ile nasıl yeniden üreteceğimi bilmiyorum.

var loader: NotificationType? 
    formButton.rx_action!.executing.subscribeNext({ [weak self] (executing) -> Void in 
     if executing { 
      loader = self?.showNotification(.Loading, title: self?.viewModel.loaderTitle.value, message: "Please wait".localized, timeout: -1) 
     } 
     else { 
      if let loader = loader { 
       loader.dismiss() 
      } 
     } 
    }).addDisposableTo(disposeBag) 

Ama sonra benim tepki veri göndermek için ek PublishSubject oluşturmak zorunda: Ben onun gözlenebilir yürütülmesi abone olmak sadece am güçlü

viewModel.submitSubject.subscribe(onNext: { (response) -> Void in 
     print(response) 
     }, onError: { (error) -> Void in 
      print(error) 
     }, onCompleted: {() -> Void in 
      //completed 
     }) {() -> Void in 
    }.addDisposableTo(disposeBag) 

benzer bir model oluşturmak için bir yolu var mı RxSwift ile Eylem?

cevap

0

Bu Action ile mümkündür, ancak şu anda açık değildir. Sorun, bir nesneye bir Action özelliğinin ayarlanmasıdır; bu nesnenin özelliği, genel olarak Action<Void, Void> olan Action tam türünü bildirmelidir (bu typealias 'd - CocoaAction). İki jenerik tip sırasıyla giriş ve çıkıştır. Void'u seçtik çünkü işin yapıldığı gerçeğini temsil ediyor, ama ne işe yaradığıyla ilgilenmiyor. Şu anda karşı karşıya kaldığınız soruna yol açtığı için mükemmel bir çözüm değil ve bu konuda üzgünüm.

Eylemin çıktısının çıktısına abone olmak istiyorsunuz, ancak çıktı olarak Void kullanıldığından, bunu yapamazsınız. Burada sahip olduğunuz PublishSubject yaklaşımı bir çözümdür, başka bir çözüm ise Void çıkış türü olarak kullanmaktır; Başarısızlığı belirtmek için hataları ve Void() hatalarını kullanabilirsiniz, ancak yapmak istediğiniz tüm işlerin Action'un sinyalinde kapsüllenmiş olması gerekir. Muhtemelen ikinci yaklaşımı kullanırdım, ama her durumda işe yaramayabilir.

Bununla başa çıkmak için an issue sahibiz, ancak çok düşünmek için zamanım olmadı. Sahip olduğunuz herhangi bir öneri veya kaynak harika olacak

İlgili konular