Giới thiệu về closure trong swift (IOS)
Bài đăng này đã không được cập nhật trong 6 năm
Part 2: https://viblo.asia/p/closure-part-2-Qbq5Q1oE5D8
Nguồn
https://medium.com/ios-os-x-development/introduction-to-closures-in-swift-3-1d46dfaf8a20
Khái niệm:
Mình xin trích dẫn nguyên văn khái niệm :
Apple, what are closures? Closures are self-contained blocks of functionality that can be passed around and used in your code. — Apple Don’t worry if that make no sense. At first, it probably sounds like: Closures are self-contained bunch of words passed around like a damn basketball. In case you don’t know, there happen to be a basketball court in the Playground. Go check it out. — Apple
Mục đích
Giới thiệu về closure: What, How and Where
What: Closure là gì?
Closure có 3 hình thức
- Global functions: Hàm toàn cục
- Nested functions: Hàm lồng nhau
- Closures expression: Biểu thức closures
2 hình thức đầu là trường hợp đặc biệt của closure. Mình sẽ giới thiệu ở bài tiếp theo Nguồn https://medium.com/ios-os-x-development/master-functions-in-swift-3-d2f684f1dc92#.t0p2brgme
Khi nói về closure trong Swift, chúng ta thường ám chỉ đến biểu thức closures. Để nói về bạn nhớ closure là gì thì minh nghĩ câu này sẽ giúp ích
Closures are headless functions.
Closures là các functions không tên.
Closures là các functions khôngkhông có từ khoá func và cũng không có tên. Hay còn được biết đến là các anonymous functions (Hàm ẩn). Chúng ta không thể gọi nó giống như function vì chúng không có tên. Chúng ta sử dụng nó trong sự kết hơp với nhưng yếu tố khác.
Cú pháp
{ ( parameters ) -> return type in
code
}
Cú pháp rất đơn giản phải không ạ.
So sánh giữa function và closure
Dưới đây là sự khác nhau cần nhớ khi nói đến function và closure:
Function
- Có tên
- Có func
- Không có in
Closure
- Không có tên
- Không có func
- Có in
Định nghĩa
Function
func giveAFunc() {}
Biến chứa closure
var giveNoFunc = { () -> () in }
Chú ý: Closure chúng ta bắt đầu bởi kí tự { và kết thúc bởi }. Chúng ta sẽ lưu giữ closure bên trong một biến để chúng ta có thể gọi nói.
Gọi closure
Gọi function
giveAFunc()
Gọi Closure
giveNoFunc()
Chúng ta thấy việc gọi là giống nhau. Tiếp theo chúng ta xem làm thể nào để chúng ta có thể biến một function thành một closure.
Chuyển Function thành closure
Hãy chuyễn sayHello thành một closure
Function sayHello
func sayHello(name: String) -> String {
return "Hello \(name)"
}
Các bước để chuyển về closure
- Loại bỏ dấu ngoặc
func sayHello(name: String) -> String
return "Hello \(name)"
- Thêm từ khoá in vào giữa các đối số và thân hàm
func sayHello(name: String) -> String in
return "Hello \(name)"
- Loại bỏ từ khoá func và tên hàm
(name: String) -> String in
return "Hello \(name)"
- Bao đóng nó bởi cặp ngoặc nhọn
{ (name: String) -> String in
return "Hello \(name)"
}
Đã xong. Đơn giản phải không nào :v
Chúng ta có thể gán biến cho closure để có thể gọi nó giống như một function
var sayHello = { (name: String) -> String in
return "Hello \(name)"
}
CALL
sayHello("Ha Van Duc")
Where are closures: Closure sử dụng ở đâu
Ở một bài topic mọi người thường bỏ qua việc closure sử dụng ở đâu khi nói về nó. Vậy câu trả lời là gì
Everywhere
Closures bắt nguồn từ sâu bên trong của ngôn ngữ Swift. Trường hợp sử dụng nhiều nhất là trong các blocks/callback, higher order functions và syntactic sugars
Tóm lại
Chúng ta đã giới thiệu qua về closure như là nó là gì, trông nó như thế nào, chúng hình thành ra sao hay đơn gian là nó ở đâu.
Nếu bạn có câu hỏi gì về closure muốn mình giải đáp hay tìm hiểu có thể comment bên dưới. Nếu mình research được sẽ cố gắng trả lời bạn. Thanks
All rights reserved