DevPrep

Все темы › Что выведет? Головоломки с собеседований

Вложенные замыкания: будет ли deinit?

Senior PRO

Задача

class TestClass {
    var block1: (() -> Void)?
    var block2: (() -> Void)?

    func test() {
        block1 = { [weak self] in
            self?.block2 = {
                print(self)
            }
            self?.block2?()
        }
        block1?()
    }

    deinit { print("deinit") }
}

var object: TestClass? = TestClass()
object?.test()
object = nil

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store