gpt4 book ai didi

swift - 在 swift 中的 try/catch 中何处放置延迟完成闭包

转载 作者:行者123 更新时间:2023-11-30 10:06:12 24 4
gpt4 key购买 nike

我对以下代码将如何运行感到有点困惑。我的意图是仅当尝试成功时才执行 onCompletion。那么 defer 关闭应该在 try 内部还是在 try 之后呢? - 或者我完全走错了路。

这个...

func addUserActivity(aUserActivity:UserActivity, onError:OnError, onCompletion: (Void) -> (Void)) {
if let database = database {
do {
try database.write({
database.add(aUserActivity)
defer {
onCompletion()
}
})
} catch {
onError(message: "Realm error",informativeText: "Realm database failed to write object")
}
}
}

或者这个...

func addUserActivity(aUserActivity:UserActivity, onError:OnError, onCompletion: (Void) -> (Void)) {
if let database = database {
do {
try database.write({
database.add(aUserActivity)
})
defer {
onCompletion()
}
} catch {
onError(message: "Realm error",informativeText: "Realm database failed to write object")
}
}
}

或者完全不同的东西?

最佳答案

无论哪种情况,defer没有必要。您可以简单地写onCompletion() .

如果您调用onCompletion()里面write block ,它将总是被执行,但如果你把它写在 try database.write{...} 之后如果 write 那么 onCompletion 将被跳过抛出一个错误,这听起来像是您想要的行为。

(由OP编辑以包含最终解决方案)

解决方案

func addUserActivity(aUserActivity:UserActivity, onError:OnError, onCompletion: (Void) -> (Void)) {
if let database = database {
do {
try database.write({
database.add(aUserActivity)
})
onCompletion()
} catch {
onError(message: "Realm error",informativeText: "Realm database failed to write object")
}
}
}

关于swift - 在 swift 中的 try/catch 中何处放置延迟完成闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35824860/

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