gpt4 book ai didi

ios - 抛出的错误被错误的捕获捕获

转载 作者:行者123 更新时间:2023-11-28 06:24:14 26 4
gpt4 key购买 nike

我在我的应用程序中使用 Realm。我正在尝试为所有类型的错误实现一个统一的错误处理接口(interface)。例如,我有一个处理所有 User 相关任务的类。所以我有一个名为 UserError 的枚举。

import Foundation
import RealmSwift

enum UserError: Error {
case doesNotExist
case alreadyExists
case databaseError(error: Error)
}

class UserHelper {

/// Fetch user object for the given email if exists.
func getUser(forEmail email: String) throws -> User {
do {
guard let user = try Realm().object(ofType: User.self, forPrimaryKey: email) else {
throw UserError.doesNotExist
}

return user
} catch {
throw UserError.databaseError(error: error)
}
}

}

我有一个单独的包罗万象的 databaseError 枚举值来捕获所有与 Realm 相关的错误。

我的方法的问题是,当我在查询数据库的 do-catch 中抛出 doesNotExist 错误时,该错误会在 this 中被捕获 方法的 catch 并作为 databaseError 重新抛出。我希望错误作为原始类型到达,doesNotExist

我该如何实现?

最佳答案

您的 catch 子句是不合格的,因此会捕获 do 子句中抛出的每个错误,无论是 Realm 错误还是 UserError .您可以尝试使 catch 子句成为条件,因为您只想在错误确实是 Realm 错误时抛出 databaseError():

do {
guard let user = try Realm().object(ofType: User.self, forPrimaryKey: email) else {
throw UserError.doesNotExist
}
return user
} catch let error as Realm.Error {
throw UserError.databaseError(error: error)
}

如果你这样做,你也可以改变你的 UserError.databaseError case 来获取一个 Realm.Error 而不是一个普通的 Error,为捕获错误的任何代码提供有关特定数据库错误的更多信息。

关于ios - 抛出的错误被错误的捕获捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42471173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com