Meaning of closures
closures are self-contained function code blocks that can be passed and used in code. Closures in Swift are similar to the code blocks in C and objective-c (blocks) and anonymous functions in some other programming languages.
Closures can capture and store references to any constants and variables in the context in which they are located. is called a package constant and variable. Swift will manage all the memory operations involved in the capture process for you.
Main optimization of closures
- Infer parameters and return value types with context
- Implicitly returns a single-expression closure, where a single-expression closure can omit a
return
keyword
- Parameter name abbreviation
- Trailing closure syntax
Closure application Scenarios
The application scenario for closures and blocks is the same. (When you think this is possible with block in OC, it can be implemented in swift with closures)
1, executes the completion callback asynchronously.
2. Callback between controllers
3, Custom View callback
Three modes of closures
Closures are available in three forms, 1, with no parameters and no return value for closures (simplest closures)
Here is a point to note, be sure to execute the call closure, or the inside code will not execute
2, closures with no return value for parameters
3, closure with parameters with return value
It is important to note that the return value needs to be manipulated or a warning will be reported.
Attention!
In order to distinguish the definition and implementation of the function, it is said that the popular point is the segmentation of the partition and subsequent operations!!!
Closure callback
A closure callback, which means that the closure is invoked as a parameter.
It is important to note that the GCD in swift and the GCD in OC are different.
Trailing closures
The trailing closure is a relatively concise notation.
It is important to note that, "most", the general closure system will automatically help us to do the trailing closure, not all, such as the top gcd nested.
Then we modify it according to the meaning of the trailing closure on the top. Delete the last parameter of the callback and the outermost parenthesis.
Escape Closure Package
When a closure is passed as a parameter to a function, but the closure is executed after the function is returned, we call the closure escaping from the function. When you define a function that accepts a closure as a parameter, you can label it before the parameter name @escaping
to indicate that the closure is allowed to "escape" the function.
One way to make a closure "escape" out of a function is to keep the closure in a variable defined outside the function. For example, many functions that initiate asynchronous operations accept a closure parameter as completion handler. Such functions return immediately after the asynchronous operation begins, but the closure is not invoked until the end of the asynchronous operation. In this case, the closure needs to "escape" out of the function, because the closure needs to be called after the function is returned. For example:
var completionHandlers: [() -> Void] = []func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) { completionHandlers.append(completionHandler)}
Novice share, do not like to spray!!! Seek to share, to seek for diffusion. Forwarding.
Swift Closure Beginner's explanation (novice must SEE)