rxs

RxSwiftExtensions

Frequently used extensoins in RxSwift

Showing:

Popularity

Downloads/wk

0

GitHub Stars

37

Maintenance

Last Commit

3yrs ago

Contributors

0

Package

Dependencies

4

License

MIT

Categories

Readme

RxSwiftExtensions

Swift 4.2 Version License Platform

Frequently used extensions in RxSwift


Dear those who love RxSwift

This library based on questions from KakaoTalk open chat room.
Join us if you have some questions about RxSwift or you are interested. We always welcome 😀
However, this chat room us operating in South Korea. Therefore, you will need speaking Korean 🇰🇷


이 라이브러리는 카카오톡 오픈 채팅방에서 올라온 질문을 바탕으로 만들어졌습니다.
RxSwift에 관련하여 질문이 있거나 관심이 있다면 언제든지 가벼운 마음으로 참여하세요 😀
이 방은 한국에서 운영되는 것이라 한국어를 필요로 할 수 있습니다... (이거 읽으실 정도면 문제없을 겁니다 😂)


このライブラリーはカカオトークオープンチャットルームに投稿された質問を基に作られました。
RxSwiftについて質問や興味があれば、いつでも気軽に参加してください 😀
このルームは韓国で営業されているものなので韓国語を必要とします 🇰🇷


Functions

Swift
  • KVO
      - [x] [`observe(keyPath: KeyPath)`](#observekeypath-keypath---observablevalue)
      - [x] [`observeWeakly(keyPath: KeyPath)`](#observeweaklykeypath-keypath---observablevalue)
      - [x] [`SectionDataType`](#sectiondatatype)
    
UIKit
UIView
UILabel
UITextView
UIScrollView
UITableView
UITableViewHeaderFooterView
  - [x] [`UITableViewHeaderFooterView.Identifier`](#uitableviewheaderfooterviewidentifier)
</details>
UICollectionView
UIViewController
  - [x] [`UIViewController.rx.viewDidLoad`](#uiviewcontrollerrxviewdidload)
  - [x] [`UIViewController.rx.viewWillAppear`](#uiviewcontrollerrxviewwillappear)
  - [x] [`UIViewController.rx.viewDidAppear`](#uiviewcontrollerrxviewdidappear)
  - [x] [`UIViewController.rx.viewWillDisappear`](#uiviewcontrollerrxviewwilldisappear)
  - [x] [`UIViewController.rx.viewDidDisappear`](#uiviewcontrollerrxviewdiddisappear)
  - [x] [`UIViewController.rx.viewWillLayoutSubviews`](#uiviewcontrollerrxviewwilllayoutsubviews)
  - [x] [`UIViewController.rx.viewDidLayoutSubviews`](#uiviewcontrollerrxviewdidlayoutsubviews)
  - [x] [`UIViewController.rx.willMove(toParentViewController: UIViewController)`](#uiviewcontrollerrxwillmovetoparentviewcontroller-uiviewcontroller)
  - [x] [`UIViewController.rx.didMove(toParentViewController: UIViewController)`](#uiviewcontrollerrxdidmovetoparentviewcontroller-uiviewcontroller)
  - [x] [`UIViewController.rx.didReceiveMemoryWarning`](#uiviewcontrollerrxdidreceivememorywarning)
  - [x] [`UIViewController.rx.isVisible`](#uiviewcontrollerrxisvisible)
  - [x] [`UIViewController.rx.isDismissing`](#uiviewcontrollerrxisdismissing)
RxSwift
ObservableType
  - [x] [`withLatestFrom(...)`](#observabletype-withlatestfrom)
  - [x] [`withLatestFromAndSelf(...)`](#observabletype-withlatestfromandself)
  - [x] [`bind(to [ObserverType])`](#observabletype-bindto-observertype)
  - [x] [`bind(to Optional<ObserverType>)`](#observabletype-bindto-optionalobservertype)
</details>
RxCocoa
SharedSequenceConvertibleType
- [x] [`withLatestFrom(...)`](#sharedsequenceconvertibletype-withlatestfrom)
- [x] [`withLatestFromAndSelf(...)`](#sharedsequenceconvertibletype-withlatestfromandself)

Functions Detail

Swift
  • KVO
    • observe(keyPath: KeyPath) -> Observable

      Observe KVO by keyPath

      KVO is an Objective-C mechanism. That means that it wasn't built with type safety in mind. This project tries to solve some of the problems.

      UIView()
        .observe(\.bounds, , options: [.initial, .new], retainSelf: true)
        .subscribe({ print($0) })
      
    • observeWeakly(keyPath: KeyPath) -> Observable

      Observe KVO by keyPath

      rx.observeWeakly has somewhat slower than rx.observe because it has to handle object deallocation in case of weak references.

      UIView()
        .observeWeakly(\.bounds, , options: [.initial, .new], retainSelf: true)
        .subscribe({ print($0) })
      
SectionDataType
  Define Section Data easily in tableView or collectionView

  Define follow

  ```
  enum TestSectionData {
      case section1
      case section2([Value])
  }

  extension TestSectionData: SectionDataType {

      typealias Item = Value

      var items: [TestSectionData.Value] {
          switch self {
          case .section1: return [.string("Section 1")]
          case let .section2(value): return value
          }
      }

      enum Value {
          case string(String)
          case int(Int)
      }
  }
  ```

  You can use it follow

  ```
  let section = sections[indexPath.section].items[indexPath.row]

  switch section {
    case let .int(value):
      cell.set(value)
      return cell
    case let .string(value):
      cell.set(value)
      return cell
  }
  ```
</details>
UIKit
  • UIView
    • UIView.rx.bounds

      Observe bounds in UIView

      UIView().rx.bounds.subscribe({ print($0) })
      
    • UIView.rx.center
      Observe center in UIView
      
      ```
      UIView().rx.center.subscribe({ print($0) })
      ```
      
UILabel
  • UILabel.rx.textColor
    Binder textColor in UILabel
    
    ```
    Observable<UIColor?>.just(UIColor.white).bind(to: UILabel().rx.textColor)
    ```
    
UITextView
  • UITextView.rx.textColor
    Binder textColor in UITextView
    
    ```
    Observable<UIColor?>.just(UIColor.white).bind(to: UITextView().rx.textColor)
    ```
    
UIScrollView
  • UIScrollView.rx.contentSize

    Observe contentSize in UIScrollView

    UIScrollView().rx.contentSize.subscribe({ print($0) })
    
  • UIScrollView.rx.scrollableVertical

    Observe scrollable of vertical (bounds.height < contentSize.height) in UIScrollView

    UIScrollView().rx.scrollableVertical.subscribe({ print($0) })
    
  • UIScrollView.rx.scrollableHorizontal
    Observe scrollable of horizontal (`bounds.width < contentSize.width`) in UIScrollView
    
    ```
    UIScrollView().rx.scrollableHorizontal.subscribe({ print($0) })
    ```
    
UITableView
  • UITableView.register(cell: UITableViewCell.self)

    Register UITableViewCell easily

    Following sample will be register with "Cell" (UITableViewCell.Identifier).

    UITableView().register(cell: Cell.self)
    

    Also you can define Identifier like follow

    UITableView().register(cell: Cell.self, forCellReuseIdentifier: "CustomIdentifier")
    
  • UITableView.register(nibCell: UITableViewCell.self)

    Register UITableViewCell using NIB easily

    Following sample will be register with "Cell" (UITableViewCell.Identifier).

    UITableView().register(nibCell: Cell.self)
    

    Also you can define Identifier like follow

    UITableView().register(nibCell: Cell.self, forCellReuseIdentifier: "CustomIdentifier")
    
  • UITableView.register(cell: UITableViewHeaderFooterView.self)

    Register UITableViewHeaderFooterView easily

    FolloFollowing sample will be register with "Cell" (UITableViewHeaderFooterView.Identifier).

    UITableView().register(cell: Cell.self)
    

    Also you can define Identifier like follow

    UITableView().register(cell: Cell.self, forCellReuseIdentifier: "CustomIdentifier")
    
  • UITableView.register(cell: UITableViewHeaderFooterView.self)

    Register UITableViewCell using NIB easily

    FolloFollowing sample will be register with "Cell" (UITableViewHeaderFooterView.Identifier).

    UITableView().register(cell: Cell.self)
    

    Also you can define Identifier like follow

    UITableView().register(cell: Cell.self, forCellReuseIdentifier: "CustomIdentifier")
    
  • UITableView.dequeue(UITableViewCell.self)

    Dequeue UICollectionViewCell easily

    Following sample will be dequeue with "Cell" (UICollectionReusableView.Identifier).

    let cell: Cell? = UITableView().dequeue(Cell.self)
    
  • UITableView.dequeue(UITableViewCell.self, indexPath: IndexPath)

    Dequeue UICollectionViewCell easily

    Following sample will be dequeue with "Cell" (UICollectionReusableView.Identifier).

    let cell: Cell? = UITableView().dequeue(Cell.self, indexPath: IndexPath)
    
  • UITableView.dequeue(UITableViewHeaderFooterView.self)

    Dequeue UITableViewHeaderFooterView easily

    let cell: Cell? = UITableView().dequeue(Cell.self)
    
  • UITableView.rx.items(Cell.self)
    Bind items by rx
    
    ```
    Observable.just(["0", "1", "2", "3"])
        .bind(to: tableView.rx.items(cell: Cell.self)) { row, item, cell in
    
        }
    ```
    
UITableViewCell
  • UITableViewCell.Identifier
    Define Identifier by class name
    
    ```
    class MyCell: UITableViewCell {
    
    }
    
    MyCell.Identifier == "MyCell"
    ```
    
UITableViewHeaderFooterView
  • UITableViewHeaderFooterView.Identifier
    Define Identifier by class name
    
    ```
    class MyCell: UITableViewHeaderFooterView {
    
    }
    
    MyCell.Identifier == "MyCell"
    ```
    
UICollectionView
  • UICollectionView.register(cell: UICollectionViewCell.self)

    Register UICollectionViewCell easily

    Following sample will be register with "Cell" (UICollectionReusableView.Identifier).

    UICollectionView().register(cell: Cell.self)
    

    Also you can define Identifier like follow

    UICollectionView().register(cell: Cell.self, forCellWithReuseIdentifier: "CustomIdentifier")
    
  • UICollectionView.register(nibCell: UICollectionViewCell.self)

    Register UICollectionViewCell using NIB easily

    Following sample will be register with "Cell" (UICollectionReusableView.Identifier).

    UICollectionView().register(nibCell: Cell.self)
    

    Also you can define Identifier like follow

    UICollectionView().register(nibCell: Cell.self, forCellWithReuseIdentifier: "CustomIdentifier")
    
  • UICollectionView.register(cell: UICollectionReusableView.self, forSupplementaryViewOfKind: SupplementaryViewOfKind)

    Register UICollectionReusableView for SupplementaryViewOfKind

    UICollectionView().register(cell: Cell.self, forSupplementaryViewOfKind: .header)
    
    UICollectionView().register(nibCell: Cell.self, forSupplementaryViewOfKind: .footer)
    
  • UICollectionView.dequeue(UICollectionViewCell.self, for: IndexPath)

    Dequeue UICollectionViewCell easily

    Following sample will be dequeue with "Cell" (UICollectionReusableView.Identifier).

    let cell: Cell? = UICollectionView.dequeue(Cell.self, for: IndexPath)
    
  • UICollectionView.dequeue(UICollectionReusableView.self, ofKind: SupplementaryViewOfKind, for: IndexPath)

    DeDequeue UICollectionReusableView for SupplementaryViewOfKind easily

    let cell: Cell? = UICollectionView.dequeue(Cell.self, ofKind: .header, for: IndexPath)
    
  • UICollectionView.rx.items(Cell.self)
    Bind items by rx
    
    ```
    Observable.just(["0", "1", "2", "3"])
        .bind(to: collectionView.rx.items(cell: Cell.self)) { row, item, cell in
    
        }
    ```
    
UICollectionReusableView
  • UICollectionReusableView.Identifier
      Define Identifier by class name
    
      ```
      class MyCell: UICollectionReusableView {
    
      }
    
      MyCell.Identifier == "MyCell"
      ```
    </details>
    
UIViewController
  • UIViewController.rx.viewDidLoad Observe when called `viewDidLoad` in UIViewController
    UIViewController().rx.viewDidLoad.subscribe({ print($0) })
    
  • UIViewController.rx.viewWillAppear Observe when called `viewWillAppear` in UIViewController
    UIViewController().rx.viewWillAppear.subscribe({ print($0) })
    
  • UIViewController.rx.viewDidAppear Observe when called `viewDidAppear` in UIViewController
    UIViewController().rx.viewDidAppear.subscribe({ print($0) })
    
  • UIViewController.rx.viewWillDisappear Observe when called `viewWillDisappear` in UIViewController
    UIViewController().rx.viewWillDisappear.subscribe({ print($0) })
    
  • UIViewController.rx.viewDidDisappear Observe when called `viewDidDisappear` in UIViewController
    UIViewController().rx.viewDidDisappear.subscribe({ print($0) })
    
  • UIViewController.rx.viewWillLayoutSubviews Observe when called `viewWillLayoutSubviews` in UIViewController
    UIViewController().rx.viewWillLayoutSubviews.subscribe({ print($0) })
    
  • UIViewController.rx.viewDidLayoutSubviews Observe when called `viewDidLayoutSubviews` in UIViewController
    UIViewController().rx.viewDidLayoutSubviews.subscribe({ print($0) })
    
  • UIViewController.rx.willMove(toParentViewController: UIViewController) Observe when called `willMove(toParentViewController: UIViewController)` in UIViewController
    UIViewController().rx.willMove(toParentViewController: parentViewController).subscribe({ print($0) })
    
  • UIViewController.rx.didMove(toParentViewController: UIViewController) Observe when called `didMove(toParentViewController: UIViewController)` in UIViewController
    UIViewController().rx.didMove(toParentViewController: parentViewController).subscribe({ print($0) })
    
  • UIViewController.rx.didReceiveMemoryWarning Observe when called `didReceiveMemoryWarning` in UIViewController
    UIViewController().rx.didReceiveMemoryWarning.subscribe({ print($0) })
    
  • UIViewController.rx.isVisible Triggered when the ViewController appearance state changes (true if the View is being displayed, false otherwise)
    UIViewController().rx.isVisible.subscribe({ print($0) })
    
  • UIViewController.rx.isDismissing Triggered when the ViewController is being dismissed
      ```
      UIViewController().rx.isDismissing.subscribe({ print($0) })
      ```
    </details>
    
RxSwift
ObservableType
- <details><summary>withLatestFrom</summary>

    Extend withLatestFrom for support multi parameters

    ```
    let a = Observable.just("A")
    let b = Observable.just("B")
    let c = Observable.just("C")

    Observable().withLatestFrom(a, b, c)
        .subscribe(onNext: { (a, b, c) in
            ...
        })
    ```
  </details>
- <details><summary>withLatestFromAndSelf</summary>

    Extend withLatestFromAndSelf for combining parameters with self

    ```
    let a = Observable.just("A")
    let b = Observable.just("B")
    let c = Observable.just("C")

    Observable().withLatestFromAndSelf(a, b, c)
        .subscribe(onNext: { (a, b, c) in
            ...
        })
    ```
  </details>
- <details><summary>bind(to [ObserverType?]?)</summary>

    Can bind multiple ObserverType in one line

    ```
    let publisher = PublishSubject<String>()
    
    let observers: [PublishSubject<String>] = [...]

    let disposable = publisher.bind(to: observers)
    ```
  </details>
- <details><summary>bind(to ObserverType?)</summary>

    Can bind optional type
    if ovserver is nil, it will ignore subscribe

    ```
    let publisher = PublishSubject<String>()
    
    let observer: PublishSubject<String>? = nil

    let disposable = publisher.bind(to: observer)
    ```
  </details>
</details>
RxCocoa
SharedSequenceConvertibleType
- <details><summary>withLatestFrom</summary>

    Extend withLatestFrom for support multi parameters

    ```
    let a = SharedSequenceConvertibleType.just("A")
    let b = SharedSequenceConvertibleType.just("B")
    let c = SharedSequenceConvertibleType.just("C")

    SharedSequenceConvertibleType().withLatestFrom(a, b, c)
        .subscribe(onNext: { (a, b, c) in
            ...
        })
    ```
  </details>
- <details><summary>withLatestFromAndSelf</summary>

    Extend withLatestFromAndSelf for combining parameters with self

    ```
    let a = SharedSequenceConvertibleType.just("A")
    let b = SharedSequenceConvertibleType.just("B")
    let c = SharedSequenceConvertibleType.just("C")

    SharedSequenceConvertibleType().withLatestFromAndSelf(a, b, c)
        .subscribe(onNext: { (a, b, c) in
            ...
        })
    ```
  </details>
</details>

Installation


Used pods

Author

tokijh

License

RxSwiftExtensions is available under the MIT License See the LICENSE file for more info.

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100
No reviews found
Be the first to rate

Alternatives

No alternatives found

Tutorials

No tutorials found
Add a tutorial