[Swift] 타입체크(TypeCheck)

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