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.
6.0
Migrate to Swift 5.4 and RxSwift 65.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
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)
To run the example project, clone the repo, and run pod install
from the Example directory first.
RxSwift is required, obviously.
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"
Since version 5.0.1, RxAlertController works with Swift Package Manager.
Evgeny Sureev, [email protected]
RxAlertController is available under the Apache License 2.0. See the LICENSE file for more info.