Это мой код:
class Person {
let age: Int
init(age: Int) {
self.age = age
}
func callAgePrinter() {
// THIS LINE
AgePrinter.printAgeOf(person: { return self } )
}
}
class AgePrinter {
static func printAgeOf(person: () -> (Person)) {
print(person().age)
}
}
Person(age: 1).callAgePrinter()
Обратите внимание на комментарий: // THIS LINE
Я могу преобразовать эту строку:
AgePrinter.printAgeOf(person: { return self } )
Кому:
AgePrinter.printAgeOf(person: { [unowned self] in return self } )
Результат кода тот же.
Мне интересно: для чего неиспользуемые замыкания (которые применяются для Swift 4.2 только на уровне объявления функций), для чего используется список захвата?Для неэкранированных замыканий гарантируется, что после завершения метода, в котором замыкание вызывается (или не вызывается), замыкание исчезает и не сохраняется.
Конечно, при сохранении все еще может произойти цикл сохранениявывод закрытия в моем примере.Однако цикл захвата не препятствует этому.
Какое значение имеет включение (или не включение) списка захвата в неэкранированные замыкания?