Created
July 29, 2017 16:10
-
-
Save 0nko/8cede6e9897051dee8e042c359244831 to your computer and use it in GitHub Desktop.
C#-style events in Kotlin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fun main(args: Array<String>) { | |
val duck = Duck() | |
duck.talked += { said -> println("Duck: $said") } | |
duck.poke() | |
} | |
class Event<T>(val eventHandler: EventHandler<T>) { | |
operator fun plusAssign(observer: (T) -> Unit) { eventHandler.observers.add(observer) } | |
operator fun minusAssign(observer: (T) -> Unit) { eventHandler.observers.remove(observer) } | |
} | |
class EventHandler<T> { | |
val observers = arrayListOf<((T) -> Unit)>() | |
operator fun invoke(value: T) { for (observer in observers) { observer(value) } } | |
} | |
class Duck { | |
private val onTalk = EventHandler<String>() | |
val talked = Event<String>(onTalk) | |
fun poke() { | |
onTalk("Quaak!") | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment