defer ทำงานอย่างไร
เรียกใช้โค้ดเมื่อออกจากขอบเขตไม่ว่าจะออกด้วยเส้นทางใด
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- defer ทำงานอย่างไร
- ลำดับของบล็อก defer หลายบล็อก
- defer สำหรับการคืนทรัพยากร
- defer กับข้อผิดพลาดและการคืนค่าก่อนกำหนด