くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

LiveData-Kotlin Extension を試してみた

基本的には、 Transformations の拡張関数の集合です。

implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.1.0-alpha04"
class MainActivityViewModel : ViewModel() {

    private val source1LiveData = Source1Livedata()

    // 同じものが流れてきたときにブロックしてくれる
    val distinctResult: LiveData<String> = source1LiveData.distinctUntilChanged()
    // 射影
    val mapResult: LiveData<String> = source1LiveData.map { it.toUpperCase() + it.toLowerCase() }
    // 新しいものが流れてきたら前のものを中止するマン
    val switchMapResult: LiveData<String> = source1LiveData.switchMap { name -> getFullName(name) }

    // このようなメソッドが必要かは置いておいてLiveData を返す関数の時に使うと良さそう
    fun getFullName(name: String): LiveData<FullName> {
        val liveData = MutableLiveData<String>()
        liveData.value = name + name
        return liveData
    }
}

// ちゃんとした型定義をすべき...
typealias FullName = String
class Source1Livedata : LiveData<String>()