[Swift] Any,AnyObject 타입 & 타입캐스팅

Annie Kang·2022년 8월 18일
0

Swift

목록 보기
7/9

안녕하세요, Annie 입니다 :)
오늘은 Any타입 과 AnyObject타입에 대해 알아보겠습니다.


  • Any : 구조체, 클래스, 열거형, 클로져 등 모든 인스턴스를 담을 수 있다.
  • AnyObject : 모든 클래스타입의 인스턴스를 담을 수 있다
let array : [Any] = [1,2,"Annie",{ _ in print ("done")}, Person()]

let person1 : [AnyObject] = [Person(), Student()]
  • 배열의 요소에 접근하기 위해선 타입캐스팅이 필요하다
    (메모리구조를 모르기 때문, 컴파일 시점에서 정해지지 않기 때문)

타입캐스팅

  • 타입캐스팅 : 인스턴스의 타입을 바꾸는 것
  • as (업캐스팅) : 자식클래스에서 부모클래스로 변환하고자 하는 경우 처럼 확실하게 캐스팅이 가능할 때 as 를 사용
  • as? as! (다운캐스팅) : 부모클래스의 타입을 자식클래스타입으로 변환하고자 하는 경우 처럼 불확실한 경우 옵셔널 값을 반환 할 수 있는 as? 를 사용한다. 타입변환 성공시 인스턴스를 반환, 실패시 nil값을 반환한다.
    as! 는 강제언래핑이 된 타입으로 변환 성공시 인스턴스 반환, 실패시 런타임 오류가 난다.

AnyObject의 사용 & 타입캐스팅 예시

let mixedArray: [AnyObject] = [s, v]
for object in mixedArray {
    switch object {
    case let x as String:
        print("'\(x)' is a String")
    default:
        print("'\(object)' is not a String")
    }
}

mixedArray의 요소가 String으로 타입캐스팅 될 때 그 object를 프린트 한다.

case let x as Stringlet x = item as? String 와 의미가 같다.
profile
성장하는 iOS 개발자

0개의 댓글

관련 채용 정보