kuluna.class
Qiita

LiveDataでnon-nullな値のみ受け取るようにする

Categories: Android

Android Architecture Componentsの中にあるLiveDataが非常に便利で、クラス間での値のやりとりや非同期処理のコールバック等で大活躍するのでめちゃくちゃ多用します。
さてこのLiveDataなのですが、ひとついまいちだと思うのが値を取り出す時がnullableな型になっているということです。

hoge.observe(this, Observer {
  // it is nullable
})

kotlinの場合はOptionalを回避することによって安全に値を受け取ることができますが、その分ネストが深くなってしまいます。

hoge.observe(this, Observer {
  it?.let {
    // it is non-null
  }
})

ならば初めからnon-nullな場合のみコールバックが返ってくるようにすれば良いではないか!
ということでこんな拡張関数を生やしてみました。

fun <T> LiveData<T>.observe(owner: LifecycleOwner, observer: (T) -> Unit) {
    observe(owner, android.arch.lifecycle.Observer<T> {
        it?.let { observer(it) }
    })
}

LiveDataの中で自分をobserveしてnon-nullの時だけコールバックを実行します。

hoge.observe(this) {
  // it is non-null
}

らくちん。