Swift Type Casting
Type Casting
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?를 사용한다
Reference
この問題について(Swift Type Casting), 我々は、より多くの情報をここで見つけました https://velog.io/@kimjk3381/Swift-Type-Castingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol