gpt4 book ai didi

swift - 抛出一个异步函数会使它在 Swift 中同步吗?

转载 作者:行者123 更新时间:2023-11-28 15:38:31 34 4
gpt4 key购买 nike

这是从 Perfect Swift PostgresSTORM 库中获取的代码示例。

do{
//Create a user object
let obj = User()
obj.name = "someUser"
//Save it to db
try obj.save({ id in
print(2..)
obj.id = id as! Int
})
print("1..")
}catch{
print("Something went wrong.")

}
//Go to next page
print("3..")

我希望看到打印日志是1..3..2..

但是,日志看起来像这样。2..1..3..

“2..”不太可能在“1..”之前打印。是让它作为同步函数运行的“尝试”吗?

最佳答案

这完全取决于 save 的 PostgresSTORM 实现。我不熟悉它,所以我不能说它是否真的是异步的,但我可以为您提供两种虚拟实现,一种是异步的,一种是具有类似签名的同步方法。

异步:

func save(callback: @escaping (Int) -> Void) throws {
OperationQueue.main.addOperation {
callback(0)
}
}

同步:

func save(callback: (Int) -> Void) throws {
callback(0)
}

(请注意,为了简单起见,在此示例中它不会抛出任何异常)。

try 是 Swift 编译器所必需的,当您调用一个可能会抛出异常并且对该方法的 (a) 同步执行没有影响的函数时。事实上,try 只是为了确保当我们使用该方法时,我们很清楚它可能会抛出异常。

我可能是错的,但如果this是SwiftORM对save方法的实现,回调总是同步调用的。

关于swift - 抛出一个异步函数会使它在 Swift 中同步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44016922/

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