From Swift Documentarion
@escaping
Apply this attribute to a parameter’s type in a method or function declaration to indicate that the parameter’s value can be stored for later execution. This means that the value is allowed to outlive the lifetime of the call. Function type parameters with the escaping type attribute require explicit use of self. for properties or methods.
class ClassThree {
var closure: (() -> ())?
func doSomething(completion: @escaping () -> ()) {
closure = finishBlock
}
}
In the above example the completion block is saved to closure and will literally live beyond the function call. So complier will force to mark completion block as @escaping.