Функция в списке захвата: ошибка "метка постороннего аргумента"
func customPrint(number: Int, via printingFunction: @escaping (Int) -> Void) {
printingFunction(number)
}
class Temp {
func tempPrintingFunction(number i: Int) {
print(i)
}
func print5() {
customPrint(number: 5) { [self] number in
tempPrintingFunction(number: number)
}
}
}
Temp().print5()
Этот код в порядке: компилируется и работает, как и ожидалось.
Но когда я передаю саму функцию в список захвата вместо:
func print5() {
customPrint(number: 5) { [tempPrintingFunction] number in
tempPrintingFunction(number: number)
}
}
Я получаю сообщение об ошибке:
Метка постороннего аргумента «число:» в вызове
Когда я удаляю этикетку, все возвращается в норму.
Но это странно. Что это? Баг или фича? Я не могу найти никакой информации об этом ни в документации, ни на форумах.
Бонусный вопрос:
почему не падает код, когда я прохожу
unowned self
в список захвата? Разве он не должен рухнуть? Я хочу, чтобы он разбился 🙂
Отредактировано:
Кстати, есть ли в этой ситуации разница между захватом и самой функцией? С точки зрения циклов сохранения и т. Д. Если мы захватим функцию,
self
тоже будут захвачены, не так ли?