Swift不会因关闭而抛出错误

时间:2019-10-27 10:03:00

标签: swift throw throws

我在将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块捕获并重新抛出到外层空间。

0 个答案:

没有答案