2017-10-30 3 views
0

내가 눌렀을 때 API 호출을 트리거하려는 UIAlertController를 제공하는 사용자 정의 관찰 가능 객체를 생성합니다. 그러나 수동으로 구독하지 않는 한 알림을 팝업으로 표시 할 수 없습니다. viewModel에서 트리거 할 수있는 방법이 있습니까?버튼 탭에서 관찰 할 수있는 RxSwift 트리거

MyController.swift

class MyController: UIViewController { 
    @IBOutlet weak var nextBarButton: UIBarButtonItem! 

    var viewModel: ViewModel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     viewModel = ViewModel(nextBarButton.rx.tap.asDriver(), alertController()asDriver(onErrorJustReturn: "")) 
    } 

    func alertController() -> Observable<String> { 
     return Observable.create { [weak alert = self] observer in 
      guard let alert = alert else { 
       observer.on(.completed) 
       return Disposables.create() 
      } 

      let alertVc = UIAlertController(title: "My Title", message: "My Message", preferredStyle: .alert) 
      let submit = UIAlertAction(title: "Continue", style: .default) { _ in 
       observer.onNext("Test") 
       observer.on(.completed) 
      } 
      let cancel = UIAlertAction(title: "Cancel", style: .cancel) { _ in 
       observer.on(.completed) 
      } 
      alertVc.addAction(cancel) 
      alertVc.addAction(submit) 
      alert.present(alertVc, animated: true, completion: nil) 

      return Disposables.create { 
       alertVc.dismiss(animated: true, completion: nil) 
      } 
     } 
    } 
} 

ViewModel.swift

public final class ViewModel { 
    init(_ manager: SessionManager, _ trigger: Driver<Void>, _ alert: Driver<String>) { 
     let _ = trigger.withLatestFrom(alert) 
      .flatMap { text in 
       return manager.rx 
        .request(urlRequest: Api.test) 
        .retry(3) 
        .asDriverOnErrorJustComplete() 
      } 
    } 
} 

답변

0

당신은 당신의 ViewModelsubscribe()에 잊고 당신은 UIButton에서 이벤트를 flatMapLatest 체인해야 할 때. 모양은 다음과 같습니다 :

public final class ViewModel { 
    init(_ manager: SessionManager, _ trigger: Driver<Void>, _ alert: Driver<String>) { 
     let _ = trigger.flatMapLatest{ alert } 
      .flatMap { text in 
       return manager.rx 
        .request(urlRequest: Api.test) 
        .retry(3) 
        .asDriverOnErrorJustComplete() 
      } 
      .subscribe() 
    } 
} 
관련 문제