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.0
Migrate to Swift 5 and RxSwift 5.04.0
Migrate to Swift 4.23.0
Convert return values fromObservable
s toSingle
andMaybe
2.1
Add Carthage support2.0
Move to Swift 41.1
Add 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.