Swift

Swift 5+: แนะนำการใช้ callback/completion handler

เรื่องที่เกี่ยวข้อง - Callback function, Completion Handler, Swift

ในการเขียนโค้ดโปรแกรม เทคนิคการใส่ function เพื่อให้สามารถเรียกใช้ได้อย่าง callback นั้นเป็นเทคนิคที่ได้รับความนิยมพอตัว และมีการเปิดให้ใช้งานในหลายๆ ภาษาโปรแกรม ที่รู้จักกันดีน่าจะเป็น JavaScript และใน Swift ก็มีให้ใช้เช่นกัน

ใน Swift เราสามารถเรียกเทคนิคนี้ว่าการสร้าง callback handler หรือ completion handler ก็ได้

การทำงานของ Callback/completion handler

completion handler มักจะอยู่ในรูปแบบของ function ที่ส่งเข้ามาเพื่อเรียกใช้งานตอนสิ้นสุดการทำงานของ function นั้นๆ

ลองนึกถึงสายลับที่ได้รับกระเป๋าที่ต้องกดปุ่มด้านในเพื่อยืนยันว่าภารกิจเสร็จสมบูรณ์ก็ได้ครับ

ยกตัวอย่างเช่นเรามีการสร้าง function ที่จะมีการขอข้อมูลจาก Web API ชื่อ loadWebAPIData

ซึ่งตรงจุดหนึ่งของการทำงานเราสามารถเรียกใช้ function ที่ชื่อว่า callOnCompletion ได้ ซึ่งในที่นี้เรากำหนดว่าให้ตัว completion รับค่า bool เป็น parameter ครับ

func loadWebAPIData(endpointURL:String, callInCompletion: (Bool)->()){
    if(endpointURL.count > 0) {
       // call web api
       callInCompletion(true)
    } else {
       callInCompletion(false)
    } 
}
  • ซึ่งจากการเขียนการทำงานของ function ด้านบนนี้จะเห็นว่า เรามีการเรียกใช้ callOnCompletion โดยใส่ค่า true หากค่า endpointURL ไม่ใช่ข้อความเปล่าๆ และอาจจะมีการติดต่อกับ Web API ตามปกติ
  • ในทางกลับกัน ถ้า endpointURL เป็นข้อความเปล่าๆ เราจะเรียกใช้ callInCompletion เพียงแต่เราจะส่งค่า false ให้แทน
  • หากมีการเรียกใช้ loadWebAPIData จริงๆ เราสามารถเขียน completion handler ได้แบบด้านล่าง
// แบบที่ 1
loadWebAPIData(endpointURL: "") { (result)->() in
    print(result)
}

// แบบที่ 2
loadWebAPIData(endpointURL: "") { result in
    print(result)
}
  • ซึ่งในการใช้งานจริงนี้ จะเห็นว่าเราเรียกใช้ loadWebAPIData โดยส่งค่า endpointURL ลงไปเป็นข้อความว่างๆ
  • และเราสามารถเขียน completion handler ต่อท้าย โดยการใช้วิธีการทั้งแบบที่ 1 และแบบที่ 2 ก็ได้
  • สังเกตว่าค่าที่ได้ในตัวแปร result ของ handler คือค่าที่ส่งผ่านมาจากการเรียกใช้ completion handler ภายในตัว function loadWebAPIData

อ้างอิง – StackOverflow

เริ่มต้นยุค AI ด้วยคอร์สฟรี และพรีเมี่ยม กับพล

หากชอบสิ่งที่พลเล่า เรื่องที่พลสอน สามารถสนับสนุนพลโดยการเข้าเรียนคอร์สออนไลน์ของพลนะคร้าบ

  • เข้าใจง่าย ใช้ได้จริง ออกแบบการสอนอย่างเข้าใจโดยโค้ชพล
  • มีคอร์สสำหรับคนใช้งานทั่วไป จนถึงเรียนรู้เพื่อใช้งานในสายอาชีพขั้นสูง
  • ทุกคอร์สมีใบประกาศณียบัตรรับรองหลังเรียนจบ

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • Always Active

Save