Swift รู้จักกับ Completion Handler และ escaping คืออะไร?
Published in
1 min readAug 10, 2019
เราใช้เมื่อไหร่? และ escaping คืออะไร?
Completion Handler
เราใช้เมื่อ เราต้องการให้มีการแจ้งเตือนเมื่อทำอะไรสักอย่างเสร็จ
Example
แฟนสั่งงานเราให้ไปล้างจาน ถ้าเสร็จแล้วไปซักผ้าต่อ (จะใช้อะไรนักหนา เรื่องสมมติเฉยๆนะครับ 555) เราไปดู Code กันเลยครับ
Code Example
override func viewDidLoad() {
super.viewDidLoad()
command()
}func command(){
washTheDishes(completionHandler: { [weak self] isDone in
if isDone {
self?.laundry()
}
})
}func washTheDishes(completionHandler:@escaping(_ isDone: Bool)->Void) {
print("washTheDishes")
completionHandler(true)
}func laundry(){
print("laundry")
}//**** Result ****
//washTheDishes
//laundry
@escaping คืออะไร?
Closure ที่เป็น Argument และถูกเรียกหลังจากที่ทำฟังก์ชั่นเสร็จ เรียกว่า escaping นั่นเอง
ไฮไลท์ของวันนี้อีก 1 ที่คือ Code ด้านล่างนี้เลยครับ
washTheDishes(completionHandler: { [weak self] isDone in
บรรทัดด้านบนนี้สังเกตุที่ [weak self] ทำไมผมต้องใส่ [weak self] ?
The reason is …
การเรียก self. อะไรก็ตามใน Closure จะกลายเป็น Strong ซึ่งนั่นหมายความว่า อาจจะเกิดปัญหา Retain Cycle ได้
จบแล้วนะครับสำหรับสำหรับ Completion handler, escaping และ [weak self] หวังว่าจะเป็นประโยชน์ไม่มากก็น้อยกับหลายๆคนนะครับ หากมีข้อผิดพลาดประการใด ต้องขออภัยด้วยนะครับ