Преимущество использования замыканий без экранирования заключается в том, что использование self является неявным. Это означает, что исчезает вся умственная перегрузка, связанная с принятием решения о том, использовать ли слабые, сильные или бесхозные ссылки на себя.

Вот тривиальный пример, который вы можете поместить в раскадровку:

class SomeClass {
    var x = 10
    private func escaping(closure: @escaping () -> Void) {
        closure()
    }
    private func nonEscaping(closure: () -> Void) {
        closure()
    }
    func runEscaping() {
        escaping { self.x = 20 } // Note that x is called on self
    }
    runNonEscaping() {
        nonEscaping { x = 30 } // Note that the call to self is implicit.
    }
}

// Let's create an instance of this class.
let c = SomeClass()

// Call the function that uses an escaping closure
c.runEscaping()
c.x // 20

// Call the function that uses a non-escapwing closure
c.runNonEscaping()
c.x // 30

Поскольку мы можем щелкнуть по функциям, удерживая нажатой клавишу «Alt», объявление @escaping является полезной подсказкой относительно того, что будет сделано с замыканием, и не грозит ли создание строгой ссылки на self.