18.类型转换
-
类型检查
类型检查:用类型检查操作符( is )来检查一个实例是否属于特定子类型。若实例属于那个子类型,类型检查操作符返回 true ,否则返回 false 。 向下转型:某类型的一个常量或变量可能在幕后实际上属于一个子类。当确定是这种情况时,你可以尝试 用类型转换操作符( as? 或 as! )向下转到它的子类型。因为向下转型可能会失败,类型转型操作符带有两种不同形式。条件形式 as? 返回⼀个你试 图向下转成的类型的可选值。强制形式 as! 把试图向下转型和强制解包转换结果结合为一个 操作。
-
Any 和 AnyObject 的类型转换
//Swift 为不不确定类型提供了了两种特殊的类型别名: - Any 可以表示任何类型,包括函数类型。 - AnyObject 可以表示任何类类型的实例。 Any 类型可以表示所有类型的值,包括可选类型。Swift 会在你用 Any 类型来表示一个可选值的时候,给你一个警告。如果你确实想使用 Any 类型来承载可选值,你可以使用 as 操作符显式转换为 Any ,如下所示: let optionalNumber: Int? = 3 things.append(optionalNumber) things.append(optionalNumber as Any) // 没有警告
19.嵌套类型
- 无
20.扩展
扩展可以给一个现有的类,结构体,枚举,还有协议添加新的功能。但是不能重写已经存在的功能。
Swift 中的扩展可以:
添加计算型实例例属性和计算型类属性
定义实例方法和类方法
提供新的构造器器
定义下标
定义和使用新的嵌套类型
使已经存在的类型遵循(conform)一个协议
1.语法
- 使⽤ extension 关键字声明扩展:
extension SomeType {
// statements
}
- 扩展可以扩充一个现有的类型,给它添加一个或多个协议。协议名称的写法和类或者结构体一样:
extension SomeType: SomeProtocol, AnotherProtocol {
// 协议所需要的实现写在这⾥里里
}
2.计算型属性
扩展可以给现有类型添加计算型实例例属性和计算型类属性。但是它们不能添加存储属性,或向现有的属性添加属性观察者。