Skip to content

Commit

Permalink
Merge pull request #33 from 4brunu/feature/mutable-observable
Browse files Browse the repository at this point in the history
Migrate to Observable and MutableObservable
  • Loading branch information
roberthein committed Jan 6, 2020
2 parents 7a20507 + 74c9d3d commit 8e4faf2
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 20 deletions.
3 changes: 2 additions & 1 deletion Example/Observable/Views/CollectionView.swift
Expand Up @@ -4,8 +4,9 @@ import Observable

class CollectionView: UICollectionView {

@Observable private var sPercentage:Float = 0
@MutableObservable private var sPercentage:Float = 0

var scrollPercentage: Observable<Float> {
var scrollPercentage: ImmutableObservable<Float> {
return _sPercentage
}
Expand Down
4 changes: 2 additions & 2 deletions Example/Observable/Views/Slider.swift
Expand Up @@ -4,9 +4,9 @@ import Observable

class Slider: UISlider {

@Observable private var positionValue:CGFloat = 0
@MutableObservable private var positionValue:CGFloat = 0

var position:ImmutableObservable<CGFloat> {
var position:Observable<CGFloat> {
return _positionValue
}

Expand Down
12 changes: 9 additions & 3 deletions Observable/Classes/Observable.swift
@@ -1,6 +1,6 @@
import Foundation

public class ImmutableObservable<T> {
public class Observable<T> {

public typealias Observer = (T, T?) -> Void

Expand Down Expand Up @@ -61,12 +61,18 @@ public class ImmutableObservable<T> {
observers.removeAll()
}

public func asImmutable() -> ImmutableObservable<T> {
@available(*, deprecated, renamed: "asObservable")
public func asImmutable() -> Observable<T> {
return self
}

public func asObservable() -> Observable<T> {
return self
}
}

@propertyWrapper
public class Observable<T>: ImmutableObservable<T> {
public class MutableObservable<T>: Observable<T> {

override public var wrappedValue: T {
get {
Expand Down
21 changes: 7 additions & 14 deletions README.md
Expand Up @@ -5,27 +5,20 @@
**Observable** is the easiest way to observe values in Swift.

## How to

### Create an Observable

```swift
var position = Observable(CGPoint.zero)
```

### Create an ImmutableObservable
Using `ImmutableObservable` we can create an "readonly"-Observable, in order to avoid side-effects on our internal API.

### Create an Observable and MutableObservable
Using `MutableObservable` you can create and observe event.
Using `Observable` you can observe event, in order to avoid side-effects on our internal API.
```swift
class SomeViewModel {
/// Public property, that can be read / observed by external classes (e.g. view controller), but not changed.
var position: ImmutableObservable<CGPoint> = {
var position: Observable<CGPoint> = {
return positionSubject
}
// Or use the helper method Observable.asImmutable()
// lazy var position = positionSubject.asImmutable()
// Or use the helper method Observable.asObservable()
// lazy var position = positionSubject.asObservable()

/// Private property, that can be changed / observed inside this view model.
private let positionSubject = Observable(CGPoint.zero)
private let positionSubject = MutableObservable(CGPoint.zero)
}
```

Expand Down

0 comments on commit 8e4faf2

Please sign in to comment.