文本 A 和代码 A 来自这篇文章。
我很奇怪为什么他们不使用代码 B 或代码 C 来实例化用户对象。我认为 Code B 和 Code C 非常简单明了。
顺便说一句,我没有测试过代码 B 和代码 C,但我认为它们是正确的。
文字A
使用 LiveData 时,您可能需要异步计算值。例如,您可能想要检索用户的偏好并将它们提供给您的 UI。在这些情况下,您可以使用 liveData 构建器函数调用挂起函数,将结果作为 LiveData 对象提供。在下面的示例中,loadUser() 是在别处声明的挂起函数。使用 liveData builder 函数异步调用 loadUser(),然后使用 emit() 发出结果
代码 A
val user: LiveData<User> = liveData {
val data = database.loadUser() // loadUser is a suspend function.
emit(data)
}
代码 B
val user: LiveData<User> = MutableLiveData<User>(database.loadUser())
代码 C
val user = MutableLiveData<User>(database.loadUser())