Mar*_*rat 5 error-handling android ios kotlin-native kotlin-multiplatform
我有这个功能可以发出网络请求并将结果写入 SQLDelight 数据库:
@Throws(Exception::class)
suspend fun updateData()
Run Code Online (Sandbox Code Playgroud)
在 Xcode 的 iOS 项目中,我看到这个函数被翻译成一个 type 为 completionHandler 的函数(KotlinUnit?, Error?) -> Void。
在我的情况下,错误类型只有 1 个可见属性 - localizedDescription. 如果我投射到NSError那么我可以获得更多可见的字段,但它们都没有任何帮助。
我在日志中看到Ktorhttp 客户端中的每个错误都像Error在 Swift 中一样抛出。这使得很难知道抛出了什么样的错误。
我希望能够看到错误类型并在某些情况下做出不同的反应。例如,如果是网络不可用错误,显示我的自定义错误文本和翻译,或者如果是 401 错误将用户发送到身份验证页面,500 显示一些其他文本等。
对于 Android 应用程序,我想我可以只转发这些异常,并且仍然能够键入检查或访问有关错误的更多数据。但我不知道要为 iOS 应用程序做什么。理想情况下,该解决方案应该在两个平台上都能很好地工作。
在 iOS 和 Android 中处理网络错误的最佳做法是什么,或者一般来说,多平台项目中共享模块抛出的任何错误/异常是什么?
您可以使用MVP架构并让Presenter组件处理这些错误,它只是向视图指示要去哪里。
像这样的东西:
shared/MyPresenter.kt
// ...
when (throwable) {
is Unauthorized -> {
view?.showInvalidCredentials()
}
is Conflict -> {
view?.showConflictAccount()
}
else -> {
view?.showError(throwable)
}
}
Run Code Online (Sandbox Code Playgroud)
通过这种方法,您将从平台视图中消除该责任。
一个可以作为指南的好项目是:https://github.com/jarroyoesp/KotlinMultiPlatform
| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |