swift - 类型转换

classstruct 在类型转换上的差别主要体现在运行时类型检查和转换

因为 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 类和两个子类 DogCat。然后我们将几个 DogCat 实例放入一个 Animal 类型的数组中。在遍历数组时,我们使用类型转换检查每个实例的具体类型并调用相应的 speak() 函数

然而,由于 struct 不支持继承,我们无法在结构体中进行类似的类型转换。在结构体中,我们可以考虑使用协议(protocol)来实现类似的行为。但请注意,这并不会提供与类类型转换相同的运行时类型检查和转换功能

因此,在实际开发中,如果您需要使用类型转换来确定对象类型或实现继承层次结构,应该使用 class。对于表示简单数据结构或不依赖于继承的情况,可以使用 struct

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift 语言类型转换可以判断实例的类型。也可以用于检测实例类型是否属于其父类或者子类的实例。 Swift 中类...
    零度_不结冰阅读 2,144评论 0 0
  • 使用场景:判断实例的类型转换实例的类型 检查类型: is 转换类型: as 检查是否遵循某个协议 为类型转换定义类...
    Sunday_David阅读 1,397评论 0 0
  • Swift 语言类型转换可以判断实例的类型。也可以用于检测实例类型是否属于父类或者子类的实例。Swift 中类型转...
    小强七号阅读 1,904评论 0 0
  • 类型转换 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例。 类型转换在 Swift 中使用 i...
    ttdiOS阅读 3,980评论 0 1
  • Swift 语言类型转换可以判断实例的类型。也可以用于检测实例类型是否属于其父类或者子类的实例,或是否实现了某个协...
    我有小尾巴快看阅读 1,144评论 0 0