我在将Realm错误从操作关闭(抛出)重新抛出到我要捕获并处理此错误作为失败结果的外层空间时遇到问题。
以下是示例用法代码
let result = withRealm("insert") { realm -> Entity in
var object = RealmObject()
self.encode(entity: e, into: &object)
try realm.write {
realm.add(object, update: .error)
}
return self.decode(object: object)
}
这是具有Realm实现的协议,其中应采取行动
public protocol IRealmStorage {
//associatedtype Entity
func withRealm<Entity>(_ operation: String, action: (Realm) throws -> Entity) -> Result<Entity, Error>
}
public extension IRealmStorage {
func withRealm<Entity>(_ operation: String, action: (Realm) throws -> Entity) -> Result<Entity, Error> {
do {
let realm = try Realm()
let entity = try action(realm)
return .success(entity)
} catch let err {
print("Failed realm \(operation) with error: \(err)")
return .failure(err)
}
}
}
但是我不明白为什么尝试realm.write()会引发错误,并且没有被RealReal do-try-catch块捕获并重新抛出到外层空间。