0Pricing
Swift Academy · บทเรียน

พื้นฐานคลอสเชอร์และการจับค่า

ทำความเข้าใจไวยากรณ์คลอสเชอร์ อาร์กิวเมนต์แบบย่อ คลอสเชอร์ต่อท้าย รายการจับค่า และความแตกต่างระหว่างแบบ escaping กับไม่ escaping

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

บทนำ

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

ไวยากรณ์คลอเชอร์

คลอเชอร์มีลักษณะคล้ายฟังก์ชันขนาดกะทัดรัด ไวยากรณ์คือ { (params) -> Return in ... }

let greet = { (name: String) -> String in
    return "Hello, \\(name)"
}
print(greet("Ada"))

อาร์กิวเมนต์แบบย่อ

Swift มีอาร์กิวเมนต์แบบย่อ เช่น $0 และ $1 เพื่อทำให้คลอเชอร์กระชับขึ้น

let doubled = [1,2,3].map { $0 * 2 }
print(doubled)

คลอเชอร์ต่อท้าย

หากคลอเชอร์เป็นอาร์กิวเมนต์ตัวสุดท้าย คุณสามารถเขียนคลอเชอร์ไว้นอกวงเล็บได้ ซึ่งเรียกว่าคลอเชอร์ต่อท้าย

func operate(_ x: Int, _ y: Int, _ f: (Int,Int)->Int) -> Int {
    return f(x,y)
}
let sum = operate(2,3) { $0 + $1 }
print(sum)

พื้นฐานการจับค่า

คลอเชอร์จับค่าจากขอบเขตโดยรอบ เช่น ตัวนับที่เพิ่มขึ้นต่อเนื่อง

func makeCounter() -> () -> Int {
    var count = 0
    return {
        count += 1
        return count
    }
}
let counter = makeCounter()
print(counter())  // 1
print(counter())  // 2

รายการจับค่าและคลอเชอร์แบบหลุดพ้น

ใช้รายการจับค่า เช่น [weak self] เพื่อหลีกเลี่ยงวงจรการคงการอ้างอิง คลอเชอร์เป็นแบบไม่หลุดพ้นโดยค่าเริ่มต้น ให้ทำเครื่องหมายด้วย @escaping หากจัดเก็บคลอเชอร์ไว้นอกการเรียกใช้

class Greeter {
    var name = "Ada"
    lazy var greet: () -> Void = { [weak self] in
        print("Hello", self?.name ?? "?")
    }
}
let g = Greeter()
g.greet()

คำถามเกี่ยวกับรายการจับค่า

ตรวจสอบอย่างรวดเร็ว: รายการจับค่ามีหน้าที่อะไร

สรุปทบทวน

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

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

บทเรียน “พื้นฐานคลอสเชอร์และการจับค่า” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐานคลอสเชอร์และการจับค่า”

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

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

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

บทเรียน “พื้นฐานคลอสเชอร์และการจับค่า” ใช้เวลานานแค่ไหน

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

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

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

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

  1. พื้นฐานคลอสเชอร์และการจับค่า
  2. รายการจับค่า — weak/unowned และการจับค่า
  3. แบบ escaping กับไม่ escaping และออโตคลอสเชอร์
← กลับไปที่ Swift Academy