在闭包中,我们可以在内部使用相同的名称以及闭包捕获的值。
func load(withResource resource: Resource) {
var data: A?
var error: Error?
load(resource: resource) { (result, error) in
data = result // Ok!
error = error // error!
}
print("data: \(data), error: \(error)")
}
我在想如果我们在讨论存储的属性时有使用self
的东西,但这些变量是在函数范围内声明的。
最简单的方法就是重命名error
,但我想知道是否还有其他办法。
答案 0 :(得分:3)
首先,如果你的加载方法是异步的,那么在打印时错误和数据总是为零。
对你的问题的直接回答是,在闭包范围内,“error”的值是参数的值,并且无法从函数中访问错误。
显然有很多选择可以解决这个问题,但一个干净的选择是将你的信息变成元组:
func load(withResource resource: Resource) {
var closureData: (data: A?, error: Error?)?
load(resource: resource) { (result, error) in
closureData = (result, error)
}
//print(closureData) if you don't need to format it)
print("data: \(closureData.data), error: \(closureData.error)")
}