gpt4 book ai didi

ios - 我们是否总是需要在闭包中调用完成处理程序?

转载 作者:搜寻专家 更新时间:2023-11-01 06:00:24 25 4
gpt4 key购买 nike

我有一个在我的闭包中调用的完成处理程序。但是,只有在一切顺利时才会调用完成处理程序。在出现错误的情况下,永远不会调用完成处理程序。

func product(with id: String, _ completion: @escaping (Product) -> ()) {

// Make a network request for the product
...

if (product) {
completion(product)
}
}

这是一个糟糕的设计吗?我最近收到评论说即使在出现错误的情况下也需要调用完成处理程序,否则调用者将无限期地等待。我以前从未听说过,现在我想知道这是否适用于 Swift。

最佳答案

严格来说,调用者根本不会等待。闭包中的代码会或不会被执行。

不过,返回错误也是一种好习惯。

一个聪明的方法是 Result类型

func product(with id: String, completion: @escaping (Result<Product,Error>) -> Void) {

// Make a network request for the product
...
if error = error { completion(.failure(error)); return }

if product {
completion(.success(product))
} else {
let error = // create some other error
completion(.failure(error))
}
}

然后调用它

product(with: "Foo") { result in
switch result {
case .success(let product): // do something with the product
case .failure(let error): // do something with the error
}
}

注意:函数声明中completion前的下划线字符没有意义。

关于ios - 我们是否总是需要在闭包中调用完成处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54204435/

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