微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kotlin 结合了 2 个以上的流程

如何解决Kotlin 结合了 2 个以上的流程

我希望组合 4 个 StateFlow 值并从中生成 1 个 StateFlow。我已经知道像这样的组合函数

val buttonEnabled = cameraPermission.combine(micPermission) {
    //some logic
}

这怎么能用 4 个流来完成?当我尝试以下操作时,我收到错误,参数太多,但组合函数文档确实说您最多可以添加 5 个流?

val buttonEnabled = cameraPermission.combine(micPermission,locationPermission,contactsPermission) {

}

解决方法

“但是组合函数文档确实说您最多可以添加 5 个流?”

是语法:

combine(flow1,flow2,flow3,flow4) {t1,t2,t3,t4 -> resultMapper}.stateIn(scope)

如果您需要 5 个以上的组合,那么为 6 个创建您自己的函数示例非常简单:

fun <T1,T2,T3,T4,T5,T6,R> combine(
    flow: Flow<T1>,flow2: Flow<T2>,flow3: Flow<T3>,flow4: Flow<T4>,flow5: Flow<T5>,flow6: Flow<T6>,transform: suspend (T1,T6) -> R
): Flow<R> = combine(
    combine(flow,::Triple),combine(flow4,flow5,flow6,::Triple)
) { t1,t2 ->
    transform(
        t1.first,t1.second,t1.third,t2.first,t2.second,t2.third
    )
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。