Giới thiệu về closure trong swift (IOS)
Part 2: https://viblo.asia/p/closure-part-2-Qbq5Q1oE5D8 https://medium.com/ios-os-x-development/introduction-to-closures-in-swift-3-1d46dfaf8a20 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 ...
Part 2: https://viblo.asia/p/closure-part-2-Qbq5Q1oE5D8
https://medium.com/ios-os-x-development/introduction-to-closures-in-swift-3-1d46dfaf8a20
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
Giới thiệu về closure: What, How and Where
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.
{ ( parameters ) -> return type in code }
Cú pháp rất đơn giản phải không ạ.
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
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 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.
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")
Ở 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
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.