Swift Type Casting


Type Casting

  • Type Casting:インスタンスタイプを特定したり、同じ階層のスーパークラスまたはサブクラスと見なしたりする方法
  • is:チェックタイプの演算子、タイプが同じかサブクラスかと思う
  • as:上り・下り
  • as?: 国際価格
  • as!: 強制抽出
  • class Human{
    let name:String
    init(name: String){
    	self.name = name
    	}
    }
    class Man:Human{}
    class Woman:Human{}
    
    let lee: Man = .init()
    lee is Man //true
    lee is Human //true
    
    let people:[Human] =[
    	Man.init(name:"lee")
      	Woman.init(name:"kim")
      	Man.init(name:"cho")
    ] //업캐스팅: Human타입인데 Man, Woman이 들어가는것
    
    //as를 사용해서 Man상위클래스인 Human으로 업캐스팅 하겠드는뜻
    //업캐스팅은 항상 성공하기때문에 as써도댐
    let human = Woman.init() as Human
    //상위프로퍼티와 하위 프로퍼티 같으면  접근가능
    //하위클래스에만있는 프로퍼티면 접근 불가
    
    //다운캐스팅: human을 하위클래스인 Woman으로 다운캐스팅
    //하위프로퍼티 접근가능
    let girl: Woman = human as? Woman
    
    //as? 사용하는이유
    let boy: Man = human as! Man //오류
    //human은 Woman을 업캐스팅 한건데 Man으로 다운캐스팅을
    //해서 다운캐스팅을 실패해서 오류가난다
    //그래서 as?를 사용한다