Swift Academy · บทเรียน

การอนุมานชนิดในคลอเชอร์

ทำความเข้าใจการอนุมานพารามิเตอร์และค่าที่ส่งคืนในคลอเชอร์

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

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

คลอสเชอร์อนุมานชนิดได้

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

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

อนุมานชนิดพารามิเตอร์

เมื่อคุณส่งคลอสเชอร์ให้ map ชนิดของสมาชิกจะบอก Swift ว่า $0 เป็นอะไร ดังนั้นคุณจึงละเว้นชนิดของพารามิเตอร์ได้

let names = ["ada", "bob"]
let upper = names.map { $0.uppercased() }
print(upper)

อนุมานชนิดค่าที่ส่งคืน

เนื้อหาของคลอสเชอร์จะกำหนดชนิดของค่าที่ส่งคืน การส่งคืนค่า Bool ทำให้คลอสเชอร์เป็นเงื่อนไข

let nums = [1, 2, 3, 4, 5]
let evens = nums.filter { $0 % 2 == 0 }
print(evens)

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

$0 $1 และค่าอื่น ๆ ใช้อ้างถึงอาร์กิวเมนต์ของคลอสเชอร์ตามตำแหน่งเมื่ออนุมานชนิดได้

let sums = zip([1, 2, 3], [10, 20, 30]).map { $0 + $1 }
print(Array(sums))

ระบุพารามิเตอร์อย่างชัดเจนเมื่อจำเป็น

คุณยังสามารถตั้งชื่อพารามิเตอร์และระบุชนิดได้ หากช่วยเพิ่มความชัดเจน

let nums = [3, 1, 2]
let sorted = nums.sorted { (a: Int, b: Int) -> Bool in
    return a < b
}
print(sorted)

อนุมานจากบริบท

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

let add: (Int, Int) -> Int = { a, b in a + b }
print(add(2, 3))

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

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

let result = [5, 3, 8, 1].sorted { $0 > $1 }
print(result)

การอนุมานใน reduce

ใน reduce ชนิดของตัวสะสมและสมาชิกจะอนุมานจากค่าเริ่มต้นและลำดับข้อมูล

let total = [1, 2, 3, 4].reduce(0) { acc, x in acc + x }
print(total)

การส่งคืนค่าจากคลอสเชอร์

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

let lengths = ["hi", "hello", "hey"].map { $0.count }
print(lengths)

ตัวแปรคลอสเชอร์ที่ระบุชนิด

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

let transform: (String) -> Int = { $0.count }
print(transform("swift"))

เมื่อใดที่ต้องระบุชนิด

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

let isPositive: (Int) -> Bool = { n in n > 0 }
print(isPositive(5), isPositive(-3))

ตรวจสอบความเข้าใจ

ทดสอบการอนุมานของคลอสเชอร์

สรุปทบทวน

คลอสเชอร์อนุมานชนิดของพารามิเตอร์และค่าที่ส่งคืนจากบริบท เช่น map filter หรือตัวแปรที่มีชนิด ใช้รูปแบบย่อ $0/$1 เมื่ออนุมานชนิดได้ และระบุชนิดอย่างชัดเจนเมื่อไม่มีบริบทให้ใช้

let f: (Int) -> Int = { $0 + 1 }
let xs = [1, 2, 3].map { $0 * 10 }
print(f(9), xs)
เริ่มต้นได้ฟรี

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

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

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

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

บทเรียน “การอนุมานชนิดในคลอเชอร์” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การอนุมานชนิดในคลอเชอร์”

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

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

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

บทเรียน “การอนุมานชนิดในคลอเชอร์” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การอนุมานชนิดทำงานอย่างไร
  2. เมื่อใดควรเพิ่มคำอธิบายชนิดอย่างชัดเจน
  3. การอนุมานจากค่าคงที่
  4. การอนุมานชนิดในคลอเชอร์
← กลับไปที่ Swift Academy