Swift

Swift: เข้าใจการทำงานของ @escaping แบบง่ายๆ

เรื่องที่เกี่ยวข้อง - Swift

ในภาษาโปรแกรม Swift อาจจะเคยเห็น @escaping กันบ้าง สำหรับคนที่เพิ่งเคยเห็น ในทีนี้ พลจะมาเล่าให้เห็นภาพว่า ทำไมเราจึงเห็นคนอื่นใช้ keyword นี้ ใช้ตอนไหน เมื่อไหร่เราควรใช้กัน

เอ้า พร้อมแล้วไปกันเลย

มักใช้กับ closure

การประกาศใช้ closure หรือในอีกทางคือการกำหนด type ของ parameter เป็นรูปแบบของ function ที่เราต้องการ เช่น

func goGo(_ doSomethingInFunction: () -> Void) {
     doSomethingInFunction()
}

ซึ่งการทำงานแบบนี้ ตัว closure (ในที่นี้ชื่อ doSomethingInFunction) จะมี scope การทำงานอยู่ในส่วนของ function ที่ชื่อ goGo() เท่านั้น

แต่การนำมาใช้งานนั้นหากเราเขียนให้ closure ทำงานนอกเหนือจาก scope ของตัว function ที่ประกาศ closure แบบด้านล่าง

func goGo(_ doSomethingInFunction: () -> Void) {
     DispatchQueue.main.async {
         doSomethingInFunction()
     }
}

ก็จะเกิด compiler error ทันที!

เพราะโดยปกติแล้ว การทำงานของ closure จะส้ินสุดไปตามตัว function

ถ้า function จบการทำงาน การทำงานของ closure ก็จะสิ้นสุดลงที่เดียวกัน

ดังนั้นการที่เราต้องการให้ closure เรียกใช้ใน scope การทำงานที่เป็นแบบพวก asynchronous เราจำเป็นต้องระบุตัว closure ให้ตัวระบบรู้ว่า

closure นี้จะหลบหนีจากการสิ้นสุดของ function ได้ ได้ ได้ (@escaping)

แบบด้านล่างนี้ไง ไม่ error

func goGo(_ doSomethingInFunction: @escaping () -> Void) {
     DispatchQueue.main.async {
         doSomethingInFunction()
     }
}

นั่นแหละครับ สงสัยส่วนไหนเพิ่มเติมถามได้

อ้างอิง – donnywals, sarunw

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

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

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

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

Privacy Preferences

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

Allow All
Manage Consent Preferences
  • Always Active

Save