swift AS , AS?, AS!
2019-05-28 本文已影响0人
阿奈
类型转换
AS , AS?, AS!
as :类型一致或者子类 左侧<=右侧
class Animal {}
class Dog: Animal {}
let d = Dog()
d as Animal
as! :父类强转子类 左侧 >=右侧
class Animal {}
class Dog: Animal {}
let a: Animal = Dog()
a as! Dog
as? : 转换失败返回nil
class Animal {}
class Dog: Animal {}
class Cat: Animal {}
let animal: Animal = Cat()
animal as! Dog///失败
animal as? Dog///成功但是为nil
声明时候的!跟?的区别
常量/变量声明的时候类型后面带有?或者!为可选类型 Swift会自动将该变量初始化为nil
!:隐式展开可选项,该变量操作的时候都会隐式的在操作前添加一个!表面改变量不为nil 需要解包后使用。
? :单纯的告诉Swift这是Optional的,如果没有初始化就默认为nil
! :可选值的强制展开。
associatedtype <泛型>
从字面上来理解,就是相关类型。意思也就是被associatedtype关键字修饰的变量,相当于一个占位符,而不能表示具体的类型。具体的类型需要让实现的类来指定。