ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] 타입 캐스팅
    앱등이에게 살충제를 뿌린다./Swift 2015. 12. 22. 23:30



    <그시절,, 우린 왜 그렇게 패캐에 집착했을까?>







     


    타입 캐스팅 

    특정 타입으로 선언된 값을 다른 타입으로 변환하는 것

    일반적으로 상속 관계에 있는 타입들 사이에서 허용됩니다.  매스팅되기 전 타입과 캐스팅되고 난 후 타입의 상위/하위 관계에 따라 업 캐스팅과 다운 캐스팅으로 나뉘어집니다.



    업 캐스팅

    • 하위 클래스 타입을 상위 클래스 타입으로 캐스팅할 때(캐스팅하기 전 타입이 하위 클래스, 캐스팅한 후 타입이 상위 클래스)
    • 캐스팅한 결과, 캐스팅하기 전 타입보다 추상화될 때
    • 일반적으로 캐스팅 과정에서 오류가 발생할 가능성이 없음

    let child = BBB()

    child as AAA 




    다운 캐스팅
    • 상위 클래스 타입을 하위 클래스 타입으로 캐스팅할 떄(캐스팅하기 전 타입이 상위 클래스, 캐스팅한 후 타입이 하위 클래스)
    • 캐스팅한 결과, 캐스팅하기 전 타입보다 구체화될 때
    • 캐스팅 과정에서 오류가 발생할 가능성이 있음
    • 오류에 대한 처리 방식에 따라 옵셔널 캐스팅과 강제 캐스팅으로 나누어짐
      • 다운 캐스팅 과정에서 오류가 발생하면 nil로 리턴되므로 이를 고려하여 옵셔널 캐스팅을 하거나 반드시 캐스팅에 성공한다는 전제하에 강제 캐스팅으로 나뉘어짐

    var tmp:AAA = BBB()

    var foo = tmp as? BBB


    //예시

    if let anyObj = tmp as? BBB{

        //BBB타입의 anyObj을 사용



    Any, AnyObject
    Objective-C의 NSObject와 유사합니다. AnyObject타입을 반환하는 메소드는 모든 타입의 클래스를 반환할 수 있다는 의미로 해석되기도 합니다.

     func move(param:AnyObject) -> AnyObject{

        return param

    }

    배열이나 딕셔너리에도 AnyObject타입을 사용하여 모든 클래스를 저장할 수 있습니다.

    Any는 AnyObject와 유사합니다. AnyObject는 클래스에 한해서 사용되지만 Any는 스위프트의 모든 타입에 대해 사용됩니다.




    출처 : 꼼꼼한 재은씨의 스위프트2 프로그래밍

Designed by Tistory.