Kotlin 协程:从 Flow<sealed class <list of <T>>> 中获取 (T) 列表

Posted

技术标签:

【中文标题】Kotlin 协程:从 Flow<sealed class <list of <T>>> 中获取 (T) 列表【英文标题】:Kotlin Coroutine: get List of (T) from Flow<sealed class <list of <T>>> 【发布时间】:2022-01-09 14:59:00 【问题描述】:

我有以下函数返回 Flow > > ,

fun getItems() : Flow&lt;Resources&lt;List&lt;Item&gt;?&gt;&gt;

如何从这个函数中获取项目列表?

其中资源类为流:

 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"
        
    

【问题讨论】:

Resources 长什么样子? @ArpitShukla,我更新了我的问题 如果响应不是Success,你想要什么? 我有一个绑定适配器,在加载或错误时显示 但是您正试图从 Flow 中获取一个列表,如果响应不是 Success,您想要一个空值吗? 【参考方案1】:

试试这个代码:

val items: List<Item>? = getItems().first  it is Resources.Success .data

它将从流中选择第一个 Success 发射。 请注意,first 是一个 suspend 函数,因此您只能从协程中调用它。

【讨论】:

以上是关于Kotlin 协程:从 Flow<sealed class <list of <T>>> 中获取 (T) 列表的主要内容,如果未能解决你的问题,请参考以下文章

深潜Kotlin协程(十九):Flow 概述

深潜Kotlin协程(二十):构建 Flow

深潜Kotlin协程(二十):构建 Flow

从 iOS 收听 Kotlin 协程流程

深入理解Kotlin协程协程中的Channel和Flow & 协程中的线程安全问题

Kotlin 协程Flow 异步流 ⑥ ( 调用 Flow#launchIn 函数指定流收集协程 | 通过取消流收集所在的协程取消流 )