LiveDataでnon-nullな値のみ受け取るようにする
2018-07-05 21:23:50 +0900 JST
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
}
らくちん。