More fun with Kotlin delegates

Viewed 1929

If you know Google's experimental Android Architecture Components, you probably know MutableLiveData. Trying to make it a bit more fun to use I came with:

class KotlinLiveData<T>(val default: T) {
    val data = MutableLiveData<T>()

    operator fun getValue(thisRef: Any?, property: KProperty<*>):T {
        return data.value ?: default
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value:T) {
        if (Looper.myLooper() == Looper.getMainLooper()) {
            data.value = value
        } else {
            data.postValue(value)
        }
    }
}

And then I can:

var name : String by KotlinLiveData("not given")
name = "Chrzęszczybrzęczykiewicz"

But alas - that makes data which is needed i.e. to register Observer inaccessible:

name.data.observe(this, nameObserver) // won't work :(

Any idea if I can get it somehow?

3 Answers
Related