在 Swift 中,类型转换(Type Casting)指的是检查一个实例的类型,或将该实例视为其超类或子类之一的过程。
Swift 提供了两种类型转换方式:
通过类型检查来检查实例的类型是否与特定的类型相同(或是子类或父类):使用 is 和 as 操作符来完成类型检查。
通过向下转换来将父类实例转换为其子类实例:使用 as? 或 as! 操作符完成向下转换。
下面是一个示例代码:
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 实例,则会引发运行时错误)