RxAlertController
I'm tired of copying same file into the project every time I need to display a message in the application, so I decided to create a pod.
Changelog
5.0Migrate to Swift 5 and RxSwift 5.04.0Migrate to Swift 4.23.0Convert return values fromObservables toSingleandMaybe2.1Add Carthage support2.0Move to Swift 41.1Add methods to display already instantiated alert controller
Introduction
RxAlertController allows you to display messages on the screen, using the sequence of RxSwift observable streams instead of traditional closures. Thus, the dialog box can be chained with other observables, for example, as follows:
api.someNetworkFunctionThatMayFail()
.retryWhen({ (error) -> Observable<Int> in
return error.flatMap({ error -> Maybe<Int> in
return UIAlertController.rx.show(in: self, title: "Error", message: error.localizedDescription, buttonTitles: ["Retry", "Abort"])
.filter({value in value == 0})
})
})
.subscribe(onNext, onError, etc)And using RxMediaPicker from RxSwiftCommunity, you can choose pictures like this:
UIAlertController.rx.show(in: self,
title: "Change avatar",
message: "Select source",
buttons: [.default("Take a picture"), .default("Select from gallery"), .cancel("Cancel")],
preferredStyle: .actionSheet)
.flatMap({ [unowned self] choice in
if choice == 0 {
return self.picker.takePhoto()
} else {
return self.picker.selectImage(source: .photoLibrary)
}
})
.map { (original, edited) -> UIImage in
return original
}
.bind(to: imageView.rx.image)
.disposed(by: disposeBag)Example
To run the example project, clone the repo, and run pod install from the Example directory first.
Requirements
RxSwift is required, obviously.
Installation
RxAlertController is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "RxAlertController"Also you can use Carthage. To install it, add line to Cartfile:
github "evgeny-sureev/RxAlertController"Author
Evgeny Sureev, [email protected]
License
RxAlertController is available under the Apache License 2.0. See the LICENSE file for more info.