Swift learning part 18 - 类型转换

本文详细介绍了Swift中的类型转换,包括使用is和as操作符进行类型检查和向下转型,以及Any和AnyObject在类型转换中的应用。通过示例展示了如何在类层次结构中进行类型转换,如何检查和转换实例类型,以及如何处理Any和AnyObject类型的值。
摘要由CSDN通过智能技术生成

类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例。

类型转换在 Swift 中使用 is 和 as 操作符实现。这两个操作符提供了一种简单达意的方式去检查值的类型或者转换它的类型。也可以用它来检查一个类型是否实现了某个协议。

为类型转换定义类层次

可以将类型转换用在类和子类的层次结构上,检查特定类实例的类型并且转换这个类实例的类型成为这个层次结构中的其他类型。

下面的三个代码段定义了一个类层次和一个包含了这些类实例的数组,作为类型转换的例子。

第一个代码片段定义了一个新的基类 MediaItem。这个类为任何出现在数字媒体库的媒体项提供基础功能。特别的,它声明了一个 String 类型的 name 属性,和一个 init(name:) 初始化器。

class MediaItem {
   
    var name: String
    
    init(name: String) {
   
        self.name = name
    }
}

下一个代码段定义了 MediaItem 的两个子类。第一个子类 Movie 封装了与电影相关的额外信息,在父类的基础上增加了一个 director 属性,和相应的初始化器。第二个子类 Song,在父类的基础上增加了一个 artist属性,和相应的初始化器:

class Movie: MediaItem {
   
    var director: String
    init(name: String, director: String) {
   
        self.director = director
        super.init(name: name)
    }
}

class Song: MediaItem {
   
    var artist: String
    init(name: String, artist: String) {
   
        self.artist = artist
        super.init(name: name)
    }
}

最后一个代码段创建了一个数组常量 library,包含两个 Movie 实例和三个 Song 实例。library 的类型是在它被初始化时根据它数组中所包含的内容推断来的。Swift 的类型检测器推断出 Movie 和 Song 有共同的父类 MediaItem,所以推断出 [MediaItem] 类作为 library 的类型。

let library = [
    Movie(name: "Casablanca", director: &#
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值