ios - 使用 RXSwift 的警报消息的 UIViewController 扩展

标签 ios swift uiviewcontroller swift3 rx-swift

我正在使用 RXSwiftUIViewcontroller 开发一个警报消息扩展。

    // UIViewController+Alertmessage
        public func observeAlertMessageSignal(alert: Observable<String>) {
            let disposeBag = DisposeBag()

            alert.observeOn(MainScheduler.instance)
                .subscribe(onNext:  { message in
                    self.alertCustomTransitionDelegate = CustomTransitioningDelegate()

                    let viewModel = AlertViewModel(message: message)

                    let storyboard = UIStoryboard(name: "Alert", bundle: nil)
                    let viewController = storyboard.instantiateInitialViewController() as! AlertViewController
                    viewController.viewModel = viewModel
                    viewController.delegate = self
                    viewController.modalPresentationStyle = .custom
                    viewController.transitioningDelegate = self.alertCustomTransitionDelegate

                    self.present(viewController, animated: true, completion: nil)

            }).addDisposableTo(disposeBag)
        }

    // ViewModel

    --> Declaration of alertObservable in viewModel
        var alertObservable = PublishSubject<String>()

    --> usage of observable:
    transportResponse = active.asObservable()
                .filter { $0 }
                .flatMap {  _  in
                    return webservice.loadTransport()
                }
                .catchError { [weak self] e in
                    if let moyaError = e as? MoyaError {
                        if case .underlying(let error) = moyaError {
                            let formattedError = error as NSError
                            let message = NSError.localizedDescription(error: formattedError)
                            self?.alertObservable.onNext(message)
                        }
                    }
                    self?.isLoadingObservable.onNext(false)
                    throw e
                }
                .map { response in
                    return [TransportData(items: response)]
            }

//ViewController:
--> code inside viewDidLoad
        self.observeAlertMessageSignal(alert: viewModel.alertObservable)

调用了 observeAlertMessageSignal 函数,但未显示我的 AlertViewController。在这方面有什么帮助吗?

谢谢!

最佳答案

您将 disposeBag 声明为方法变量。当方法调用结束时,disposebag 将被释放,你的订阅也将被释放。您可以简单地将一个 disposebag 传递给该方法,并将该 disposebag 保存在您的 VC 中

关于ios - 使用 RXSwift 的警报消息的 UIViewController 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42386960/

相关文章:

ios - 按编号对解析对象进行排序

android - 进行外围剪辑的最快方法

ios - userInfoTransfer,有效负载太大

ios - 如何将数据从先前的 segue 传递给 subview Controller ?

iOS 少数 TableViewController 的 .h 和 .m 相同

Swift 3 太空射击游戏 : Issue with bullet collision

ios - 无法在模拟器上构建模块 'UIKit',但不能在手机上构建

ios - 移动 ViewController 时,标签栏和导航栏不会显示

ios - 尝试在转换过程中开始模态转换

ios - 队列何时会认为任务已完成?