Published 2022-03-19

Swift - 类型转换

在 Swift 中,类型转换(Type Casting)指的是检查一个实例的类型,或将该实例视为其超类或子类之一的过程。

Swift 提供了两种类型转换方式:

下面是一个示例代码:

class Animal {
  func makeSound() {
    print("I am an animal")
  }
}
 
class Dog: Animal {
  override func makeSound() {
    print("Woof!")
  }
}
 
let animal = Animal()
let dog = Dog()
 
// Type check
if dog is Animal {
  print("dog is an Animal")
}
 
// Downcasting
let maybeDog = animal as? Dog
if let dog = maybeDog {
  dog.makeSound()
} else {
  print("Not a dog")
}
 
// Forced downcasting
let definitelyDog = animal as! Dog // Runtime error!

在上面的代码中,我们创建了一个 Animal 类和一个继承自 Animal 的 Dog 类。使用 is 操作符检查 dog 实例是否是 Animal 类的子类,并使用 as? 操作符尝试将 Animal 实例转换为 Dog 实例。最后,使用 as! 操作符强制将 Animal 实例转换为 Dog 实例(如果尝试转换一个非 Dog 实例,则会引发运行时错误)