A lightweight observables framework, also available in Swift
You can download a jar from GitHub's releases page.
Jitpack
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
dependencies {
compile 'com.github.urbancompass:snail-kotlin:x.x.x'
}val observable = Observable<thing>()observable.subscribe(
next = { thing in ... }, // do something with thing
error = { error in ... }, // do something with error
done = { ... } // do something when it's done
)Closures are optional too...
observable.subscribe(
next = { thing in ... } // do something with thing
)observable.subscribe(
error = { error in ... } // do something with error
)val variable = Variable<whatever>(some initial value)val optionalString = Variable<String?>(null)
optionalString.asObservable().subscribe(
next = { string in ... } // do something with value changes
)
optionalString.value = "something"val int = Variable<Int>(12)
int.asObservable().subscribe(
next = { int in ... } // do something with value changes
)
int.value = 42val just = Just(1) // always returns the initial value (1 in this case)
val failure = Fail(RunTimeException()) // always returns error
failure.subscribe(
error = { it } //it is RuntimeException
)
val n = 5
let replay = Replay(n) // replays the last N events when a new observer subscribesYou can specify which dispatcher an observables will be notified on by using .subscribe(dispatcher: <desired dispatcher>). If you don't specify, then the observable will be notified on the same dispatcher that the observable published on.
There are 3 scenarios:
-
You don't specify the dispatcher. Your observer will be notified on the same dispatcher as the observable published on.
-
You specified
Maindispatcher AND the observable published on theMaindispatcher. Your observer will be notified synchronously on theMaindispatcher. -
You specified a dispatcher. Your observer will be notified async on the specified dispatcher.
Subscribing on Main
observable.subscribe(Dispatchers.Main, next = {
// do stuff with it...
})