android - iOS中的Kotlin Multiplatform Mobile : How to handle errors (network, db等)?

标签 android ios error-handling kotlin-multiplatform kotlin-native

我有这个函数可以发出网络请求并将结果写入 SQLDelight 数据库:

@Throws(Exception::class)
suspend fun updateData()
在 Xcode 的 iOS 项目中,我看到该函数被转换为类型为 (KotlinUnit?, Error?) -> Void 的 completionHandler 的函数。 .
在我的情况下,错误类型只有 1 个可见属性 - localizedDescription .如果我投给 NSError然后我可以获得更多可见的字段,但它们都没有任何帮助。
我在日志中看到 Ktor 中的每个错误http 客户端被抛出为 Error在 swift 。这使得很难知道引发了什么样的错误。
我希望能够看到错误类型并对某些情况做出不同的 react 。例如,如果是网络不可用错误,显示我的自定义错误文本和翻译,或者如果是 401 错误将用户发送到身份验证页面,500 显示其他文本等。
对于 Android 应用程序,我想我可以只转发这些异常,并且仍然能够键入检查或访问有关错误的更多数据。但我不知道如何为 iOS 应用程序做些什么。理想情况下,该解决方案应该在两个平台上都能很好地工作。
处理 iOS 和 Android 中的网络错误或多平台项目中的共享模块引发的任何错误/异常的最佳实践是什么?

最佳答案

您可以使用 MVP架构,让 Presenter组件处理这些错误,它只是向 View 指示要去哪里。
像这样的东西:shared/MyPresenter.kt

// ...
when (throwable) {
    is Unauthorized -> {
        view?.showInvalidCredentials()
    }
    is Conflict -> {
        view?.showConflictAccount()
    }
    else -> {
        view?.showError(throwable)
    }                    
}
使用这种方法,您将从平台 View 中删除该责任。
一个可以作为指导的好项目是:https://github.com/jarroyoesp/KotlinMultiPlatform

关于android - iOS中的Kotlin Multiplatform Mobile : How to handle errors (network, db等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65498994/

相关文章:

android - Android:forceclose应用出现故障后

android - Sonarqube 不显示 Android Lint 的结果

ios - Swift Framework - 公共(public)类结果为未声明的类型

ios - Objective-C 访问 Plist 中的特定项目

ios - addUIInterruptionMonitor(withDescription :handler:) not working on iOS 10 or 9

javascript - 如何检查快速监听回调中的错误?

c++ - CallWindowProc()生成错误5(访问被拒绝)

android - 如何在 MVVMCross TabActivity 中设置 Activity 选项卡

android - 在 Android 上解析 SHOUTcast 7.html 元数据

java - Spring在@Transactional方法中捕获JpaSystemException并回滚事务