Kotlin Multiplatform中如何从fold闭包返回User对象?
解决fold方法返回类型不匹配问题
你的问题出在fold方法的类型约束上:fold要求onSuccess和onFailure两个lambda必须返回相同类型。你当前的代码里,onSuccess返回了User,但onFailure没有返回对应类型(默认返回Unit),导致fold整体的返回类型被推断为Unit,和函数声明的User返回类型冲突,所以报错。
要修复这个问题,你需要让fold的两个分支都返回User类型(或者在失败分支抛出异常,因为此时无法返回合法的User实例),然后让函数直接返回fold的结果。修正后的代码如下:
suspend fun getUser(accessToken: String): User { return provider.getUser(accessToken).fold( onSuccess = { print("login") val user = User.populateUserDetails(it) currentUser = user user // 明确返回User实例 }, onFailure = { print(it.message) throw it // 抛出异常,终止执行并将异常传递给上层 } ) }
关键说明:
- 移除了
return@fold,改为直接在onSuccesslambda中返回user,这样fold的返回类型就是User - 在
onFailure分支抛出异常,因为当获取用户失败时,无法构造合法的User实例,抛出异常是符合函数返回User(非空)的设计逻辑的 - 函数直接返回
fold的执行结果,这样整个函数的返回类型就和声明一致了
如果你的业务允许返回空值,也可以将函数返回类型改为User?,此时onFailure分支返回null即可:
suspend fun getUser(accessToken: String): User? { return provider.getUser(accessToken).fold( onSuccess = { print("login") val user = User.populateUserDetails(it) currentUser = user user }, onFailure = { print(it.message) null // 返回null表示获取失败 } ) }
内容的提问来源于stack exchange,提问作者Burf2000
相关产品推荐
相关产品推荐

