You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
[](https://circleci.com/gh/RxSwiftCommunity/NSObject-Rx/tree/master)
|
|
|
|
|
|
|
|
|
|
NSObject+Rx
|
|
|
|
|
===========
|
|
|
|
|
|
|
|
|
|
If you're using [RxSwift](https://github.com/ReactiveX/RxSwift), you've probably encountered the following code more than a few times.
|
|
|
|
|
|
|
|
|
|
```swift
|
|
|
|
|
class MyObject: Whatever {
|
|
|
|
|
let disposeBag = DisposeBag()
|
|
|
|
|
|
|
|
|
|
...
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
You're actually not the only one; it has been typed many, many times.
|
|
|
|
|
|
|
|
|
|
[](https://github.com/search?q=let+disposeBag+%3D+DisposeBag%28%29&type=Code&utf8=✓)
|
|
|
|
|
|
|
|
|
|
Instead of adding a new property to every object, use this library to add it for you, to any subclass of `NSObject`.
|
|
|
|
|
|
|
|
|
|
```swift
|
|
|
|
|
thing
|
|
|
|
|
.bind(to: otherThing)
|
|
|
|
|
.disposed(by: rx.disposeBag)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Sweet.
|
|
|
|
|
|
|
|
|
|
It'll work just like a property: when the instance is deinit'd, the `DisposeBag` gets disposed. It's also a read/write property, so you can use your own, too.
|
|
|
|
|
|
|
|
|
|
If you want to add a DisposeBag to an Object that does not inherit from NSObject, you can also implement the protocol `HasDisposeBag`, and you're good to go. This protocol provides a default DisposeBag called `disposeBag`.
|
|
|
|
|
|
|
|
|
|
Installing
|
|
|
|
|
----------
|
|
|
|
|
|
|
|
|
|
#### CocoaPods
|
|
|
|
|
|
|
|
|
|
Add to your `Podfile`:
|
|
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
|
pod 'NSObject+Rx'
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
And that'll be 👌
|
|
|
|
|
|
|
|
|
|
#### Carthage
|
|
|
|
|
|
|
|
|
|
Add to `Cartfile`:
|
|
|
|
|
```
|
|
|
|
|
github "RxSwiftCommunity/NSObject-Rx"
|
|
|
|
|
```
|
|
|
|
|
Add frameworks to your project (no need to "copy items if needed")
|
|
|
|
|
|
|
|
|
|
Run `carthage update` or `carthage update --platform ios` if you target iOS only
|
|
|
|
|
|
|
|
|
|
Add run script build phase `/usr/local/bin/carthage copy-frameworks`
|
|
|
|
|
with input files being:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$(SRCROOT)/Carthage/Build/iOS/RxSwift.framework
|
|
|
|
|
$(SRCROOT)/Carthage/Build/iOS/NSObject_Rx.framework
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
And rule ✌️
|
|
|
|
|
|
|
|
|
|
Contributing
|
|
|
|
|
------------
|
|
|
|
|
|
|
|
|
|
Source files are in the root directory. We use CocoaPods to develop, check out the unit tests in the Demo project.
|
|
|
|
|
|
|
|
|
|
License
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
MIT obvs.
|
|
|
|
|
|
|
|
|
|

|