使用 RXSwift 的警报消息的 UIViewController 扩展
Posted
技术标签:
【中文标题】使用 RXSwift 的警报消息的 UIViewController 扩展【英文标题】:UIViewController extension for alert message using RXSwift 【发布时间】:2017-02-22 09:04:09 【问题描述】:我正在使用RXSwift
为UIViewcontroller
开发警报消息扩展。
// 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 验证按钮单击时的所有文本字段