본문 바로가기
앱/iOS(Swift)

[Swift] Type Casting

by 리드맥 2022. 1. 23.

Type Casting

  • Type Casting: 인스턴스의 타입을 확인하거나 인스턴스를 같은 계층에 있는 슈퍼클래스나 서브 클래스로 취급하는 방법
  • is: 타입을 체크하는 연산자, Type와 동일하거나 서브클래스인경우 같다고 여긴다
  • 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?를 사용한다

' > iOS(Swift)' 카테고리의 다른 글

[iOS] MVC 패턴  (0) 2022.01.26
[iOS] 앱 생명주기  (0) 2022.01.23
[Swift] for in, forEach 차이  (0) 2022.01.23
[Swift] DeadLock  (0) 2022.01.23
[Swift] while, repeat while 차이  (0) 2022.01.23

댓글