Swift Academy · บทเรียน

defer ทำงานอย่างไร

เรียกใช้โค้ดเมื่อออกจากขอบเขตไม่ว่าจะออกด้วยเส้นทางใด

บทเรียน 1 จาก 413 ขั้นตอน

defer ทำงานอย่างไร เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คำสั่ง defer ทำอะไร

บล็อก defer จะกำหนดให้โค้ดทำงานเมื่อขอบเขตปัจจุบันกำลังจะสิ้นสุด ไม่ว่าจะออกจากขอบเขตด้วยวิธีใดก็ตาม

func demo() {
    defer { print("cleanup") }
    print("work")
}
demo()

ทำงานเมื่อออกจากขอบเขต

โค้ดที่เลื่อนการทำงานไว้จะทำงานหลังจากส่วนที่เหลือของขอบเขตเสร็จสิ้น และก่อนที่การควบคุมจะออกจากขอบเขตนั้น

func greet() {
    defer { print("goodbye") }
    print("hello")
}
greet()

defer ทำงานหลังการทำงานตามปกติ

แม้จะมีคำสั่งหลายรายการ เนื้อหาของ defer ก็จะทำงานเป็นลำดับสุดท้าย

func process() {
    defer { print("3 deferred") }
    print("1 start")
    print("2 middle")
}
process()

การเลื่อนการทำงานภายในลูป

บล็อก defer ที่อยู่ภายในตัวลูปจะทำงานเมื่อจบการวนซ้ำ แต่ละครั้ง

for i in 1...3 {
    defer { print("end of iteration", i) }
    print("start of iteration", i)
}

การเลื่อนการทำงานภายใน if

ขอบเขตสามารถเป็นบล็อกใดก็ได้ defer ในบล็อก if จะทำงานเมื่อบล็อก if นั้นสิ้นสุด

func check(_ flag: Bool) {
    if flag {
        defer { print("leaving if block") }
        print("inside if")
    }
    print("after if")
}
check(true)

การจับค่าปัจจุบัน

บล็อกที่เลื่อนการทำงานจะจับตัวแปรโดยการอ้างอิง จึงเห็นค่าของตัวแปรในขณะที่บล็อกทำงาน

func counterDemo() {
    var count = 0
    defer { print("final count:", count) }
    count = 5
}
counterDemo()

การเลื่อนการทำงานไม่ได้ทำให้งานล่าช้า

defer ไม่ได้ทำงานแบบอะซิงโครนัส แต่จะทำงานแบบซิงโครนัสเมื่อออกจากขอบเขต ก่อนที่ฟังก์ชันจะคืนการควบคุมให้ผู้เรียก

func order() {
    defer { print("B") }
    print("A")
}
order()
print("C")

การใช้งานทั่วไป: จับคู่การตั้งค่าและการเก็บกวาด

วางการเก็บกวาดไว้ถัดจากการตั้งค่า เพื่อให้ทั้งสองส่วนอยู่คู่กันทั้งในเชิงภาพและเชิงตรรกะ

func session() {
    print("open session")
    defer { print("close session") }
    print("do work")
}
session()

การเลื่อนการทำงานในบล็อก do

defer ภายในบล็อก do จะทำงานเมื่อออกจากบล็อกนั้น

func run() {
    do {
        defer { print("do block cleanup") }
        print("inside do")
    }
    print("after do")
}
run()

คำสั่งหลายรายการใน defer

บล็อก defer สามารถมีคำสั่งได้หลายรายการ โดยคำสั่งทั้งหมดจะทำงานพร้อมกันเมื่อออกจากขอบเขต

func multi() {
    defer {
        print("step 1 of cleanup")
        print("step 2 of cleanup")
    }
    print("main work")
}
multi()

เหตุผลที่ใช้ defer

defer รับประกันว่าการเก็บกวาดจะเกิดขึ้นไม่ว่าขอบเขตจะสิ้นสุดอย่างไร จึงลดโอกาสที่จะลืมทำในเส้นทางการทำงานบางเส้นทาง

func guaranteed() {
    defer { print("always runs") }
    print("body")
}
guaranteed()

ตรวจสอบอย่างรวดเร็ว

ทดสอบจังหวะการทำงานของ defer

สรุปทบทวน

defer จัดกำหนดให้โค้ดทำงานเมื่อสิ้นสุดขอบเขตปัจจุบัน ไม่ว่าขอบเขตจะสิ้นสุดอย่างไร โดยจะทำงานแบบซิงโครนัสเป็นรายการสุดท้ายในขอบเขต และเหมาะอย่างยิ่งสำหรับวางการเก็บกวาดไว้ถัดจากการตั้งค่า

func demo() {
    defer { print("last") }
    print("first")
}
demo()
เริ่มต้นได้ฟรี

เรียนรู้ Swift ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
122
บทเรียน
409

คำถามที่พบบ่อย

บทเรียน “defer ทำงานอย่างไร” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “defer ทำงานอย่างไร” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “defer ทำงานอย่างไร”

เรียกใช้โค้ดเมื่อออกจากขอบเขตไม่ว่าจะออกด้วยเส้นทางใด คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “defer ทำงานอย่างไร” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. defer ทำงานอย่างไร
  2. ลำดับของบล็อก defer หลายบล็อก
  3. defer สำหรับการคืนทรัพยากร
  4. defer กับข้อผิดพลาดและการคืนค่าก่อนกำหนด
← กลับไปที่ Swift Academy