Closure in Swift 5

What is Closure?

Closure là các khối function khép kín có thể được chuyển qua và sử dụng trong code của bạn. Closures trong Swift tương tự như blocks trong C và Objective-C và lambdas trong các ngôn ngữ lập trình khác.

  • Closure là một function and với từ khoá “func”

  • Closure là một block của code mà bạn có thể gán cho biến.

  • Trong Swift “var” và “let” lưu trữ thông tin, Các hàm “func” thực thi các tác vụ và Các Closures có function code dưới dạng một biến và có thể được passed around.

What are the types of the Closure?

  • Closure mà không có parameters cũng như giá trị trả về.
  • Closure có các tham số.
  • Closure giá trị trả về.
  • Trailing Closure.
Closure không có tham số và giá trị trả về :
var myClosure = {
    print("Hello I'm a Closure")
}
myClosure()         
=> Hello I'm a Closure
Closure có parameters
var closure: (String) -> Void = { str in
   print(str)
}
var closure: (Int, Int) -> Void = { first, second in
   print(first + second)
}

Vì các tham số không có tên nên bạn có thể refer đến chúng với $ + parameters number

var closure: (Int, Int) -> Void = {
  print($0 + $1)
}
closure(3, 2)          
=> 5
Closure có giá trị trả về
var closure: () -> String = {
 return "Hello Closure"
}
var value = closure()
print(value)  
=> Hello Closure

các closures cũng có thể chấp nhận các tham số và trả về giá trị

var addTwoNumbers: (Int, Int) -> Int = {
  return $0 + $1
}
addTwoNumbers(4, 5)   
=> 9
Trailing Closure

Nếu tham số cuối cùng của một hàm là closure thì được gọi là trailing closure.

func callMe(closure: () -> Void) {
 print("will call you")
 closure()
 print("did call you")
}
callMe {
 print("calling you...")
}
=> will call you
=> calling you...
=> did call you

một vị dụ khác của trailing closure có parameter

func callMe(name: String, closure: (String) -> Void) {
 print("\(name) will call you")
 closure(name)
 print("\(name) did call you")
}
callMe(name: "Smith") { name in
 print(name, "is calling you")
}
=> Smith will call you
=> Smith is calling you
=> Smith did call you

All Rights Reserved