Прежде всего, вы должны использовать некий Координатор для вызова контроллеров push / present. И создайте функцию, которая представляет Alert.
Например:
class Router {
private let rootViewController: UIViewController
let retryAction = PublishSubject<Void>()
func showGalleryAlert() {
let alert = UIAlertController(title: "Your Title", message: "Your Message", preferredStyle: .alert)
let settings = UIAlertAction(title: "Name Action", style: .default) { _ in
// send here your action to PublishSubject
self.retryAction.send()
}
let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
alert.addAction(cancel)
alert.addAction(settings)
rootViewController.present(alert, animated: true)
}}
Затем вам нужно ввести этот маршрутизатор в свою ViewModel и прослушать этот PublishSubject .
Или вы можете использовать Single / Maybe функцию, вот небольшой пример того, как ее использовать:
public func openList() -> Maybe<Void> {
return .create { observer -> Disposable in
let alert = UIAlertController(title: "Your Title", message: "YourMessage", preferredStyle: .alert)
let settings = UIAlertAction(title: "Name Action", style: .default) { _ in
// send here your action
observer.send()
}
let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
alert.addAction(cancel)
alert.addAction(settings)
rootViewController.present(alert, animated: true)
return Disposables.create {
DispatchQueue.main.async {
vc.dismiss(animated: true, completion: nil)
}
}
}
}
И обрабатывать ее через ViewModel.
PS: Вы должны использовать на входах Subjects в ViewModel, а не Drivers. Драйвер ДОЛЖЕН быть только для таких представлений, как вывод.