Swift5.1类型转换&扩展

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.计算型属性
扩展可以给现有类型添加计算型实例例属性和计算型类属性。但是它们不能添加存储属性,或向现有的属性添加属性观察者。