728x90
Swift의 TypeCheck 방법중에 타입을 확인하는 type(of:)와 타입을 비교하는 is에 대해 알아보도록 하겠습니다.
타입 체크(TypeCheck)
스위프트의 타입캐스팅은 is와 as로 구현되어있고, 인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스인것처럼 사용될 수 있습니다.
type(of:) - 타입확인
class className {}
var anyArray: [Any] = [1, "2", 3.9]
var anyObjectArray: [AnyObject] = [className()]
func printGeneric<T>(_ value: T) {
let types = type(of: value)
print("\(value) of type \(types)")
}
printGeneric(2)
type(of: anyArray) // Array<Any>
type(of: anyObjectArray) // Array<AnyObject>
type(of: 1) // Int
is - 타입비교
어떤 변수의 자료형을 모를 때 자료형을 확인 할 수 있도록 제공되는 연산자
변수 is 자료형
var anyArray: [Any] = [1, "2", 3.0]
if anyArray[0] is Int {
print("Int") // Int
} else {
print("else")
}
type(of: anyArray[0])
if anyArray[1] is String {
print("String") // String
} else {
print("else")
}
type(of: anyArray[1])
type(of:)를 써서 비교할 때는 .Type까지 명시해야 한다.
if type(of:anyArray[0]) is Int.Type {
print("Equal")
}
//오류(Cast from 'Any.Type' to unrelated type 'Int' always fails)
if type(of:anyArray[0]) is Int {
print("Equal")
}
상속 관계에서도 사용가능
인스턴스가 서브클래스 타입이라면 true를, 그렇지 않으면 false를 반환한다.
class Human {}
class Student: Human {}
class Baby: Human {}
let someone: Student = Student()
print(someone is Human) // true
print(someone is Student) // true
print(someone is Baby) // false
'Swift' 카테고리의 다른 글
[Swift] Error Handling (0) | 2019.07.24 |
---|---|
[Swift] 타입캐스팅(Type Casting) (0) | 2019.07.22 |
[Swift] Closure - 3 (NoEscaping, Escaping, AutoClosure) (0) | 2019.07.22 |
[Swift] Closure - 2 (Capturing) (0) | 2019.07.22 |
[Swift] Closure - 1 (Basic) (0) | 2019.07.22 |