[Swift] (기초) Type Casting / 타입 캐스팅 / 다운 캐스팅 / 업 캐스팅
2021. 9. 1. 20:10ㆍ🍏/Swift 기초 공부
/* 타입 캐스팅 */ // 스위프트의 타입캐스팅은 // 인스턴스의 타입을 확인하는 용도 // 또는 클래스의 인스턴스를 // 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 // 확인하는 용도로 사용합니다. // is, as를 사용합니다 let someInt: Int = 100 let someDouble: Double = Double(someInt) // double type의 인스턴스를 하나 더 생성을 해준것. 타입캐스팅 x class Person { var name: String = "" func breath(){ print("숨을 쉽니다") } } class Student: Person{ var school: String = "" func goToSchoo() { print("등교를 합니다") } } class UniversityStudent: Student{ var major: String = "" func goToMT() { print("멤버쉽 트레이닝을 갑니다.") } } var chan: Person = Person() var hana: Student = Student() var jason: UniversityStudent = UniversityStudent() var result: Bool result = chan is Person result = chan is Student result = chan is UniversityStudent result = hana is Person result = hana is Student result = hana is UniversityStudent result = jason is Person result = jason is Student result = jason is UniversityStudent if chan is UniversityStudent{ print("chan은 대학생입니다") }else if chan is Student{ print("chan은 학생입니다") }else if chan is Person{ print("chan은 사람입니다") } if hana is UniversityStudent{ print("hana은 대학생입니다") }else if jason is Student{ print("hana은 학생입니다") }else if jason is Person{ print("hana은 사람입니다") } switch jason { case is UniversityStudent: print("jason은 대학생입니다") case is Person: print("jason은 사람입니다") case is Student: print("jason은 학생입니다") default: print("jason은 사람도, 학생도, 대학생도 아닙니다.") } // jason은 맨위에것. /* 업 캐스팅 */ // as를 사용하여 부모클래스의 인스턴스로 사용할 수 있도록 // 컴파일러에게 타입정보를 전환해줍니다 // Any 혹은 AnyObject로도 타입정보를 변환할 수 있습니다. // 암시적으로 처리되므로 생략해도 무방합니다. var mike: Person = UniversityStudent() as Person var jenny: Student = Student() //var jina: UniversityStudent = Person() as UniversityStudent // 컴파일오류 var jina: Any = Person() // as Any 생략가능 var optionalCasted: Student? optionalCasted = mike as? UniversityStudent optionalCasted = jenny as? UniversityStudent optionalCasted = jina as? UniversityStudent optionalCasted = jina as? Student var forcedCasted: Student forcedCasted = mike as! UniversityStudent //forcedCasted = jenny as! UniversityStudent //forcedCasted = jina as! UniversityStudent //forcedCasted = jina as! Student func doSomethingWithSwitch(someone: Person){ switch someone{ case is UniversityStudent: (someone as! UniversityStudent).goToMT() case is Student: (someone as! Student).goToSchoo() case is Person: (someone as! Person).breath() } } doSomethingWithSwitch(someone: mike as Person) doSomethingWithSwitch(someone: mike) doSomethingWithSwitch(someone: jenny) doSomethingWithSwitch(someone: chan) func doSomething(someone: Person){ if let universityStudent = someone as? UniversityStudent{ universityStudent.goToMT() }else if let student = someone as? Student{ student.goToSchoo() }else if let person = someone as? Person{ person.breath() } } doSomething(someone: mike as Person) doSomething(someone: mike) doSomething(someone: jenny) doSomething(someone: chan)
'🍏 > Swift 기초 공부' 카테고리의 다른 글
[Swift] (기초) Protocol / 프로토콜 (0) | 2021.09.01 |
---|---|
[Swift] (기초) Assert & Guard / Assertion / Early Exit / Guard (0) | 2021.09.01 |
[Swift] (기초) Optional Chaining / 옵셔널 체이닝 (0) | 2021.08.28 |
[Swift] (기초) Instance / 인스턴스 생성 & 소멸 (init & deinit) (0) | 2021.08.24 |
[Swift] (기초) Property / 프로퍼티 (0) | 2021.08.24 |