Функция в списке захвата: ошибка "метка постороннего аргумента"

      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 тоже будут захвачены, не так ли?

0 ответов

Другие вопросы по тегам