Kotlin 协程:从 Flow<sealed class <list of <T>>> 获取 (T) 的列表
Kotlin Coroutine: get List of (T) from Flow<sealed class <list of <T>>>
我有以下功能 return Flow > > ,
fun getItems() : Flow<Resources<List<Item>?>>
如何从这个函数中获取项目列表?
其中资源 class 如下:
sealed class Resources<out T>(val data: T?) {
class Success<T>(data: T) : Resources<T>(data)
class Error(val throwable: Throwable) : Resources<Nothing>(null)
object Loading : Resources<Nothing>(null)
override fun toString(): String {
return when (this) {
is Success -> "Success: $data"
is Error -> "Error: ${throwable.message}"
is Loading -> "Loading"
}
}
}
试试这个代码:
val items: List<Item>? = getItems().first { it is Resources.Success }.data
它将从流中选取第一个 Success
发射。
请注意,first
是一个 suspend
函数,因此您只能从协同程序中调用它。
我有以下功能 return Flow
fun getItems() : Flow<Resources<List<Item>?>>
如何从这个函数中获取项目列表?
其中资源 class 如下:
sealed class Resources<out T>(val data: T?) {
class Success<T>(data: T) : Resources<T>(data)
class Error(val throwable: Throwable) : Resources<Nothing>(null)
object Loading : Resources<Nothing>(null)
override fun toString(): String {
return when (this) {
is Success -> "Success: $data"
is Error -> "Error: ${throwable.message}"
is Loading -> "Loading"
}
}
}
试试这个代码:
val items: List<Item>? = getItems().first { it is Resources.Success }.data
它将从流中选取第一个 Success
发射。
请注意,first
是一个 suspend
函数,因此您只能从协同程序中调用它。