본문 바로가기

IT/Swift

[swift] Type Casting

[swift 기초문법] - 타입캐스팅(Type casting)

스위프트는 굉장히 type strict한 언어 입니다. 다른 타입끼리의 값 교환을 엄격히 제한합니다.

또한 암시적 데이터 타입 변환(Implicit Type Conversion)은 지원하지 않습니다.

 

    var doubleValue: Double = 4.2

    var castingValue: Int = Int(doubleValue)

 

스위프트에서는 위와같이 타입을 변경합니다. 이는 타입캐스팅이 아니라 이니셜라이저를 통해 새로운 Int구조체 인스턴스를 생성한 것입니다.

 

위 내용은 스위프트에서 타입캐스팅이라기 보다는 이니셜라이저의 사용입니다.

스위프트에서 타입캐스팅은 is(타입 확인 연산자)와 as 연산자로 구현됩니다.

 

 

 

 

타입 확인 연산자 is

해당 클래스이거나 자식 클래스라면 true 아니면 false를 반환합니다.

클래스뿐 아니라 모든 데이터 타입에 사용가능합니다.

 

메타 타입(Meta Type)

타입의 타입을 뜻합니다.

클래스 타입, 구조체 타입, 열거형 타입, 프로토콜 타입 등의 타입의 타입입니다.

메타 타입 : 타입 이름.Type

프로토콜 타입의 메타 타입 : 프로토콜 이름.Protocol

 

self

self를 사용하여 타입을 값처럼 표현할 수 있습니다.

className.self : className 타입을 값으로 표현한 값을 반환

protocolName.self : protocolName 프로토콜을 값으로 표현한 값을 반환

 

        let protocolType: testProtocol.Protocol = testProtocol.self

        print(protocolType) //testProtocol

 

 

 

 

다운캐스팅

부모클래스의 타입을 자식클래스의 타입으로 캐스팅하는것입니다.

 

타입캐스트 연산자(Type Cast Operator)

as?, as! 두가지기ㅏ 있습니다.

as? : 실패했을 경우 nil을 반환 값이 있으면 옵셔널을 반환합니다.

as! : 반환값이 옵셔널이 아닙니다. 실패할 경우 런타입 오류가 발생합니다.

 

    class ParentsClass { }

    class ChildClass: ParentsClass { }

    let childClass: ChildClass = ChildClass()

    let casting: ParentsClass? = childClass as? ParentsClass

 

Any, AnyObject

Any : 함수 타입을 포함한 모든 타입을 뜻함

AnyObject : 클래스 타입만 뜻함

 

 

 

 

#swift 기초

#swift 강의

#ios programming

'IT > Swift' 카테고리의 다른 글

[swift] Protocol Default Implementations, Associated Type  (0) 2019.09.28
[swift] Extension, Generic  (0) 2019.09.25
[swift] Inheritance  (0) 2019.09.22
[swift] Subscript  (0) 2019.09.19
[swift] Map, Filter, Reduce, Monad, FlatMap  (0) 2019.09.16