Swift Academy · บทเรียน

การแปลงชนิด: is, as?, as! และ as

ตรวจสอบและแปลงชนิดอย่างปลอดภัยด้วยตัวดำเนินการแปลงชนิดของ Swift

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

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

การแปลงชนิดคืออะไร

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

class Animal { var name: String = "Animal" }
class Dog: Animal { func bark() { print("Woof") } }
let a: Animal = Dog()
print(a.name)

ตัวดำเนินการ is

ใช้ is เพื่อตรวจสอบว่าอินสแตนซ์เป็นคลาสย่อยชนิดใดชนิดหนึ่งหรือไม่

let a: Animal = Dog()
if a is Dog {
  print("It's a dog")
}

การแปลงลงชนิดด้วย as?

as? จะพยายามแปลงลงชนิดและคืนค่าแบบเลือกได้ หากไม่สำเร็จ ผลลัพธ์จะเป็น nil

let a: Animal = Dog()
if let dog = a as? Dog {
  dog.bark()
} else {
  print("Not a dog")
}

การแปลงลงชนิดด้วย as!

as! จะแปลงเป็นชนิดย่อยโดยบังคับ ใช้เฉพาะเมื่อคุณแน่ใจเกี่ยวกับชนิดเท่านั้น หากชนิดไม่ถูกต้อง แอปจะหยุดทำงาน

let a: Animal = Dog()
let dog = a as! Dog
dog.bark()

การแปลงขึ้นชนิดด้วย as

การแปลงจากคลาสย่อยขึ้นเป็นคลาสแม่สำเร็จเสมอ และใช้ as

let dog = Dog()
let animal = dog as Animal
print(animal.name)

การแปลงชนิดในคอลเลกชัน

อาร์เรย์หลายชนิดที่ระบุชนิดเป็น [Any] ต้องแปลงชนิดก่อนจึงจะใช้พฤติกรรมเฉพาะได้

let items: [Any] = [1, "hello", Dog()]
for item in items {
  if let d = item as? Dog { d.bark() }
  if let s = item as? String { print(s) }
}

การแปลงชนิดด้วย AnyObject

AnyObject แทนอินสแตนซ์ของคลาสใดก็ได้ ใช้ as? เพื่อดึงชนิดที่เป็นรูปธรรมออกมา

let objs: [AnyObject] = [Dog(), Dog()]
for obj in objs {
  if let d = obj as? Dog { d.bark() }
}

การแปลงชนิดโปรโตคอล

คุณสามารถแปลงระหว่างชนิดโปรโตคอลกับชนิดรูปธรรมได้โดยใช้ตัวดำเนินการเดียวกัน

protocol Runnable { func run() }
class Cat: Animal, Runnable { func run() { print("Cat runs") } }
let r: Runnable = Cat()
if let cat = r as? Cat { print(cat.name) }

การจับคู่รูปแบบด้วย is ใน switch

คำสั่ง switch ของ Swift สามารถจับคู่ตามชนิดได้โดยใช้รูปแบบ is

let value: Any = 42
switch value {
case is Int: print("Integer")
case is String: print("String")
default: print("Other")
}

รูปแบบ as? ใน switch

รวม switch กับ let x as Type เพื่อทั้งตรวจสอบและผูกค่าได้ในขั้นตอนเดียว

let value: Any = "Swift"
switch value {
case let s as String: print("String: \(s)")
case let i as Int: print("Int: \(i)")
default: break
}

แนวทางปฏิบัติที่ปลอดภัยสำหรับการแปลงชนิด

เลือกใช้ as? แทน as! เสมอ เพื่อหลีกเลี่ยงการหยุดทำงานขณะรันในโค้ดที่ใช้งานจริง

func describe(_ obj: AnyObject) {
  if let dog = obj as? Dog { dog.bark(); return }
  print("Unknown type")
}

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

ตัวดำเนินการใดคืนค่าแบบเลือกได้เมื่อแปลงลงชนิด

สรุปบทเรียน

การแปลงชนิดใน Swift: is ใช้ตรวจสอบชนิด, as? แปลงลงชนิดอย่างปลอดภัยเป็นค่าแบบเลือกได้, as! แปลงลงชนิดโดยบังคับ และ as แปลงขึ้นชนิด ควรเลือกใช้ as? ในโค้ดที่ใช้งานจริง

เริ่มต้นได้ฟรี

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

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

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

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

บทเรียน “การแปลงชนิด: is, as?, as! และ as” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การแปลงชนิด: is, as?, as! และ as”

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

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

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

บทเรียน “การแปลงชนิด: is, as?, as! และ as” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การสืบทอดคลาสและคีย์เวิร์ด super
  2. override, final และการป้องกันการสร้างคลาสย่อย
  3. การแปลงชนิด: is, as?, as! และ as
  4. ตัวทำลายและวงจรชีวิตหน่วยความจำ
← กลับไปที่ Swift Academy