스위프트 프로그래밍 3판을 보고 정리한 내용입니다.
스위프트의 타입 캐스팅은 is 와 as 로 구현했다.
타입 확인 연산자인 is는 인스턴스가 어떤클래스의 인스턴스인지 타입을 확인해 볼수 있습니다.
class Person{
let name:String
init(name:String) {
self.name = name
}
}
class Student:Person{
let school:String
init(school:String,name:String){
self.school = school
super.init(name: name)
}
}
let person:Person = Person(name: "junseole")
let student:Student = Student(school: "middle", name: "gildong")
print(person is Student) // false
print(person is Person) // true
print(student is Person) //true
print(student is Student) //true
as? 는 다운캐스팅이 실패했을 경우 nil을 반환하고
as! 는 실패했을 경우 런타임 오류를 발생시킨다.
if let actionOne: Person = student as? Student{
print(actionOne.name) //gildong 출력
}else{
print("출력 2")
}
if let actionTwo: Person = person as? Student{
print("출력 1")
}else{
print("출력 2")
}// 출력 2
Any는 함수 타입을 포함한 모든 타입을 뜻하고 , AnyObject는 클래스 타입만을 뜻한다.