Một đóng cửa chỉ là một chức năng với các thông số di chuyển bên trong dấu ngoặc, với từ khóa in
để tách các tham số khỏi thân hàm. Hai ví dụ sau đây xác định các chức năng tương đương:
func myFunc(number: Int) -> Int {
let result = 3 * number
return result
}
let myClosure = { (number: Int) -> Int in
let result = 3 * number
return result
}
Bạn thực sự có thể gọi cho họ cả về chính xác theo cùng một cách:
let x = myFunc(2) // x == 6
let y = myClosure(2) // y == 6
Thông báo như thế nào ví dụ thứ hai là chính xác giống như là người đầu tiên, duy nhất trong ví dụ đầu tiên, các tham số (number: Int) -> Int
nằm ngoài các dấu ngoặc và trong ví dụ thứ hai các tham số nằm trong dấu ngoặc vuông, theo sau là từ khóa in
.
map
hoạt động bằng cách lấy một mảng (numbers
, trong ví dụ của bạn) và tạo một mảng mới là kết quả của việc áp dụng hàm đóng cho mỗi phần tử trong numbers
. Vì vậy, nếu numbers
là [1, 2, 3]
, ví dụ ở trên sẽ bắt đầu bằng 1
. Nó sẽ áp dụng các chức năng đóng cửa mà sẽ sản xuất một 3
(cuz tất cả nó là nhân các yếu tố từ mảng đầu tiên của 3). Nó làm điều đó cho mỗi phần tử trong numbers
, cho đến khi nó tạo ra một mảng mới, [3, 6, 9]
.
Nếu bạn muốn, bạn có thể gọi map
sử dụng tên của một trong hai chức năng ở trên hoặc đóng cửa ở trên hoặc bằng cách viết rõ ràng bên trong map
. Tất cả các ví dụ dưới đây là hoàn toàn tương đương:
let numbers = [1, 2, 3]
// Example 1
let times3 = numbers.map(myFunc) // times3 == [3, 6, 9]
// Example 2
let timesThree = numbers.map(myClosure) // timesThree == [3, 6, 9]
// Example 3
let xThree = numbers.map({ (number: Int) -> Int in
let result = 3 * number
return result // xThree == [3, 6, 9]
})
Lưu ý rằng Ví dụ 3 là giống như ví dụ 2, chỉ trong Ví dụ 3 đóng cửa được nêu ra một cách rõ ràng bên trong map
, trong khi trong Ví dụ 2 đóng cửa đã được chỉ định đến một hằng số được gọi là myClosure
và hằng số được cung cấp cho map
.
Hy vọng điều này sẽ giúp - việc đóng cửa vui nhộn nhưng gây nhầm lẫn.
Đây cũng là phần giới thiệu tốt về các đóng cửa trong Swift: http: //letvargo.mooo.com/a-beginners-guide-to-closures-in-swift/) –