Ответ
Да. Замыкания являются ссылочными типами и могут быть присвоены свойствам класса или структуры.
Ключевой аспект — управление памятью. Если замыкание захватывает self, необходимо предотвратить сильные циклические ссылки (retain cycles).
Пример безопасной реализации:
class MyClass {
var closure: (() -> Void)?
init() {
// Используем weak capture, чтобы избежать retain cycle
closure = { [weak self] in
self?.doSomething()
}
}
private func doSomething() {
print("Action performed")
}
}
Рекомендации:
- Всегда используйте
[weak self]или[unowned self], если замыкание, хранимое как свойство, захватываетself. - Тип свойства должен соответствовать сигнатуре замыкания (например,
(() -> Void)?).