타입 캐스팅
let char: Character = "A"
print(char is Character)
// true
print(char is String)
// false
as
as?
as!
class Person{
var id = 0
var name = "name"
var email = "hgk@gmail.com"
}
class Worker: Person{
// id
// name
// eamil
var salary = 300
}
class Programmer: Worker{
// id
// name
// eamil
// salary
var lang = "Swift"
}
------------------------------------------------------------------------------------------
// 업캐스팅 - as
let person1 = Person()
let worker1 = Worker()
let programmer1 = Programmer()
let personList = [person1, worker1, programmer1]
// 타입을 선언하지 않았지만 Person 타입으로 인식 -> 업캐스팅이 된 상황
personList[1].name
//personList[1].salary // Person 타입으로 보고 있기 때문에 salary 에 접근하지 못함
let worker2 = Worker()
worker2.salary
let workerPerson = worker2 as Person
//workerPerson.salary // Person 타입으로 보고 있기 때문에 salary 에 접근하지 못함
------------------------------------------------------------------------------------------
// 다운캐스팅 - as? / as!
// as?
let pro = programmer1 as? Programmer // 타입 변환이 될 수도 있고 안 될 수도 있기 때문에 옵셔널 리턴
lf let person2 = programmer1 as? Programmer {
person2.lang //실행 됨
}
if let person3 = worker1 as? Programmer {
person3.lang //실행 안됨
}
// as!
let pro2 = worker2 as! Programmer // Error : 타입 변환 실패시 오류