Быстрое значение захвата с тем же именем
В закрытии мы можем как-то использовать то же имя внутри, а также значение, захваченное закрытием.
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
но мне было интересно, есть ли другой путь.
1 ответ
Решение
Во-первых, если ваш метод загрузки асинхронный, ошибка и данные всегда будут равны нулю при печати.
Прямой ответ на ваш вопрос заключается в том, что в рамках замыкания значение "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)")
}