Completion Handlers trong Swift 3 - IOS
Bài viết hướng dẫn chi tiết về Completion Handlers trong Swift 3 cho lập trình iOS, giải thích khi nào cần sử dụng, cách khai báo hàm với Completion Handlers, và hai phương pháp gọi hàm: tạo function riêng và trailing closures. Bài viết đi kèm với ví dụ thực tế về việc tải dữ liệu JSON, giúp người học dễ dàng nắm bắt khái niệm quan trọng này trong lập trình iOS hiện đại.

Kiến thức yêu cầu:
-
Function
-
Closures
-
JSON
Khi nào cần dùng Completion Handlers ?
Thông thường, khi chúng ta download dữ liệu như JSON, hình ảnh sẽ cần sử dụng Completion Handlers để thông báo kết quả của việc download này như thế nào.
Demo
Khai bào hàm có dùng Completion Handlers
Để dễ hiểu mình sẽ lấy ví dụ 1 hàm tượng trưng cho việc download JSON từ trang niviki.com/toppost/json. Chỉ là giả định thôi nha, link này không có dữ liệu gì đâu
Nhìn vào tham số của hàm:
loadData( url : String, completion : (String) -> () )
Để dễ hiểu, bạn cứ đọc câu thần chú là: Khi hoàn thành thì completion của tui sẽ gắn với 1 String và không trả về gì hết
Cách viết khác:
loadData( url : String, completion : (result : String) -> Void )
Nếu viết theo kiểu dài dòng này thì trong hàm khi gán giá trị cho completion, bạn phải dùng:
Bên trong hàm loadData
bạn xử lý logic như tải dữ liệu chẳng hạn, tải xong thì bạn gán dữ liệu vào completion
. Đương nhiên để cho dễ hiểu mình cho completion
là String
thôi, bạn có thể trả về bất kỳ kiểu gì bạn thích. Chẳng hạn mình đang viết một app download bảng xếp hạng TOP Music Video thì mình sẽ dùng:
func loadData(url : String, completion : ([MusicVideo]) -> Void )
[MusicVideo]
là một mảng class của mình.
Gọi hàm có completion handler như thế nào
Với hàm tượng trưng ban đầu, để gọi (sử dụng) hàm này, ta dùng:
Với 2 đối số là url
và completion
. (Thực chất completion
là hàm, bạn có thể xem thêm về closure tại đây. )
url
thì dễ hiểu rồi, với completion
thì chúng ta điền gì vào?
Có 2 cách:
-
Bạn tạo một function riêng cho dễ nhìn
-
Viết trực tiếp luôn, dân gian còn gọi là trailing closures (trail và đuôi đó, tức là viết sau cái hàm luôn)
Tạo function riêng
func didLoadData(number : String) -> (){
print(number)
}
Mình đặt tên hàm là didLoadData
, bạn có thể đặt tên hoa mỹ hơn như daTaiXongDuLieuRoiNe
cũng được.
Bạn chú ý tham số của hàm didLoadData
là (number : String)
và kiểu trả về là -> ()
Bạn thấy quen không? Tức là cái completion bạn khai báo sao thì hàm didLoadData bạn khai báo giống như vậy. Đại ý của Apple là 2 cái khớp thì mới ráp vô hàm loadData được đó. Khi sử dụng bạn chỉ cần
loadData(url: "khoa.com", completion: didLoadData)
Lúc này, kết quả sẽ ra:
Khong thay data dau het a, hihhih
Trailing Closures
Cái này thì nhìn ảo diệu và ngắn ngọn hơn.
loadData(url:
"niviki.com/toppost/json
"){
result in
print(result)
}
Bây giờ có 2 nhân vật mới là result và in xuất hiện.
result đại diện cho tham số được khai báo tại completion - tức là một chuỗi String trong ví dụ trên. Tại sao lại đặt result, tui muốn đặt tên khác được không? Được chứ!
loadData(url: "
niviki.com/toppost/json"){
ketquane in
print(ketquane)
}
Lúc này, kết quả sẽ ra:
Day la data ne
Ngoài ra, bạn có thể chơi trội bằng cách xử dụng shorthand như vầy:
loadData(url: "niviki.com/toppost/json"){
print($0)
}
Vì có một tham số nên bạn biết result
lúc này tương đương với $0
. Xem thêm về closure tại đây.
Vậy nên xài function hay trailing closure? Câu trả lời là tùy sở thích của bạn nhé!
Bạn đã học được gì?
-
Khi nào dùng Completion Handlers
-
Cách khai báo function có Completion Handlers
-
Hai cách gọi hàm có Completion Handlers
Tuy nhiên bài viết vẫn chưa đề cập đến Completion Handlers có kiểu trả về (return). Bạn đọc có thể tìm hiểu thêm.
Rất hoan nghênh mọi đóng góp, phản hồi, khiếu nại từ bạn đọc gần xa qua ô bình luận phía dưới, còn ngại ngần gì nữa mà không thể hiện khả năng anh hùng bàn phím của bạn!
Awaiting for your comment!!!
Related Posts
Discover more content you might enjoy

Game Theory trong thời đại AI: Khi máy móc tham gia vào "trò chơi"
Bài viết phân tích sự giao thoa giữa lý thuyết trò chơi (Game Theory) và trí tuệ nhân tạo, giải thích cách AI đang thay đổi các nguyên lý cân bằng Nash và chiến lược tối ưu. Tác giả đưa ra các ví dụ thực tế về ứng dụng trong kinh doanh, giao thông và an ninh mạng.

Bài này không phải AI viết
Suy ngẫm chân thành về giá trị của việc viết thủ công trong kỷ nguyên AI. Dù AI có thể tạo nội dung hiệu quả, bài viết này là lời khẳng định về sự kết nối cá nhân và giá trị độc đáo mà con người mang lại cho văn bản của mình.

Dự đoán về Vibe Coding: Cách AI sẽ biến đổi việc tạo ra phần mềm
Bài viết phân tích cách 'vibe coding' - phương pháp lập trình dựa trên mô tả ý định thay vì viết code trực tiếp - sẽ dân chủ hóa việc phát triển phần mềm. Tác giả dự đoán về sự chuyển đổi từ giao diện dòng lệnh sang thiết kế trực quan, sự xuất hiện của phần mềm tự cải thiện, và tác động đến cấu trúc tổ chức công ty cũng như các thị trường ngách chưa được khai thác.

Dùng AI để hỗ trợ đầu tư crypto
Bài viết chia sẻ 7 mẹo thực tế để sử dụng AI (như Claude.ai và ChatGPT) hỗ trợ hiểu rõ whitepaper và tài liệu kỹ thuật của các dự án blockchain. Từ việc yêu cầu tóm tắt đơn giản, giải thích như cho trẻ em, đặt câu hỏi làm rõ, sử dụng ví dụ, tạo tình huống giả định, chuyển đổi thuật ngữ, đến so sánh nhiều nguồn tài liệu - giúp nhà đầu tư đưa ra quyết định đầu tư crypto sáng suốt hơn.
![[Case Study] - StatcWeb.Studio dùng nocode để làm tool nocode: 200h - 0 sales](/_next/image?url=https%3A%2F%2Fres.cloudinary.com%2Fkhoanguyen1505%2Fimage%2Fupload%2Fv1751208984%2Fkhoa_blog%2FCase_Study_-_StatcWebStudio_d%25C3%25B9ng_nocode_%25C4%2591%25E1%25BB%2583_l%25C3%25A0m_too%2Fe7498c4f-8702-4835-b931-01eb1ffe70b0_1024x585.png.png&w=828&q=75)
[Case Study] - StatcWeb.Studio dùng nocode để làm tool nocode: 200h - 0 sales

Sinh viên khởi nghiệp - Chú không phải Bill Gates
Bài viết chia sẻ góc nhìn thực tế về việc sinh viên khởi nghiệp, định nghĩa khởi nghiệp đơn giản là làm chủ bản thân, phát triển sản phẩm và kiếm được tiền từ đó. Tác giả phân tích lợi thế của ngành IT trong khởi nghiệp, đối mặt với những phản ứng tiêu cực từ xã hội, và đưa ra lời khuyên thiết thực cho sinh viên muốn khởi nghiệp: bắt đầu từ những mục tiêu nhỏ, thực tế và khả thi thay vì mơ mộng trở thành Bill Gates.