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

Posted

技术标签:

【中文标题】使用 RXSwift 的警报消息的 UIViewController 扩展【英文标题】:UIViewController extension for alert message using RXSwift 【发布时间】:2017-02-22 09:04:09 【问题描述】:

我正在使用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 没有出现。对这个有帮助吗?

谢谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于使用 RXSwift 的警报消息的 UIViewController 扩展的主要内容,如果未能解决你的问题,请参考以下文章

使用 RxSwift 和 RXCocoa 验证按钮单击时的所有文本字段

RxSwift 系列

我应该如何访问有关用于使用RxSwift和MVVM填充表格视图的数组的数据

如何正确安装“RxSwift”模块?

RxSwift 结合异构的 observables

如何在 C# 中使用警报消息来处理成功消息?