Skip to content

evgeny-sureev/RxAlertController

Repository files navigation

RxAlertController

CI Status Version License Platform Carthage compatible

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

  • 6.0 Migrate to Swift 5.4 and RxSwift 6
  • 5.0 Migrate to Swift 5 and RxSwift 5.0
  • 4.0 Migrate to Swift 4.2
  • 3.0 Convert return values from Observables to Single and Maybe
  • 2.1 Add Carthage support
  • 2.0 Move to Swift 4
  • 1.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"

Since version 5.0.1, RxAlertController works with Swift Package Manager.

Author

Evgeny Sureev, [email protected]

License

RxAlertController is available under the Apache License 2.0. See the LICENSE file for more info.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published