Slide 6
Slide 6 text
val liveData3: LiveData = merge(liveData1, liveData2) { i: Int?, b: Boolean? ->
// ...
}
inline fun merge(
liveData1: LiveData,
liveData2: LiveData,
crossinline block: (T1?, T2?) -> U?
): LiveData {
val result = MediatorLiveData()
result.addSource(liveData1) { t1 ->
block.invoke(t1, liveData2.value)?.takeUnless { it is Unit }?.let { result.value = it }
}
result.addSource(liveData2) { t2 ->
block.invoke(liveData1.value, t2)?.takeUnless { it is Unit }?.let { result.value = it }
}
return result
}
merge
ར༻Πϝʔδ
ؔͷఆٛ
(֦ுؔͰͳ͘ී௨ͷؔ)
block தͰ LiveDataͷߋ৽ΛΩϟϯηϧͰ͖ΔΑ͏ʹ͢Δҝͷॲஔ
(Ωϟϯηϧ͍ͨ͠߹null͘͠Γͳ͠Ͱreturn͢Δ)