[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 |