class
和 struct
在类型转换上的差别主要体现在运行时类型检查和转换
因为 class
支持继承,可以继承其他类的属性和方法。这使得我们可以使用类型转换来确定实例的具体类型或在继承层次结构中进行向上和向下转换
以下是一个关于 class
类型转换的简单示例:
class Animal {
func speak() {
print("I am an animal.")
}
}
class Dog: Animal {
override func speak() {
print("Woof!")
}
}
class Cat: Animal {
override func speak() {
print("Meow!")
}
}
let pets: [Animal] = [Dog(), Cat(), Dog()]
for pet in pets {
if let dog = pet as? Dog {
dog.speak()
} else if let cat = pet as? Cat {
cat.speak()
}
}
在上述示例中,我们创建了一个 Animal
类和两个子类 Dog
和 Cat
。然后我们将几个 Dog
和 Cat
实例放入一个 Animal
类型的数组中。在遍历数组时,我们使用类型转换检查每个实例的具体类型并调用相应的 speak()
函数
然而,由于 struct
不支持继承,我们无法在结构体中进行类似的类型转换。在结构体中,我们可以考虑使用协议(protocol
)来实现类似的行为。但请注意,这并不会提供与类类型转换相同的运行时类型检查和转换功能
因此,在实际开发中,如果您需要使用类型转换来确定对象类型或实现继承层次结构,应该使用 class
。对于表示简单数据结构或不依赖于继承的情况,可以使用 struct