Swift รู้จักกับ Completion Handler และ escaping คืออะไร?

Ton Attapong
Seekster Development
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] หวังว่าจะเป็นประโยชน์ไม่มากก็น้อยกับหลายๆคนนะครับ หากมีข้อผิดพลาดประการใด ต้องขออภัยด้วยนะครับ

--

--