Swift - Any & AnyObject

이원석·2024년 11월 27일

Swift

목록 보기
24/38

Any & AnyObject

타입 캐스팅을 수행할 때 일반적으로 상속 관계에 있는 클래스끼리만 캐스팅이 가능하지만, Any와 AnyObject 타입을 사용할 경우, 상속 관계에 있지 않아도 타입 캐스팅을 할 수 있다.

Any

모든 타입을 저장한다

var things: [Any] = []
 
things.append(1)
things.append(1.0)
things.append("sodeul")
things.append(false)        
things.append(Human.init()))        
things.append({ print("I am Sodeul!") })    

AnyObject

모든 클래스 타입을 저장한다

var things: [AnyObject] = []
 
things.append(1) // 에러
things.append(1.0) // 에러
things.append("sodeul") // 에러
things.append(false)  // 에러       
things.append(Human.init()))        
things.append({ print("I am Sodeul!") }) // 에러

Any & AnyObject의 타입 캐스팅

as를 이용한 패턴 매칭(switch)

for thing in things {
    switch thing {
    case _ as Int:
        print("Int Type!")
    case _ as Double:
        print("Double Type!")
    case _ as String:
        print("String Type!")
    case _ as Human:
        print("Human Type")
    case _ as () -> ():
        print("Closure Type")
    default:
        print("something else")
    }
}

as? as!를 이용한 다운캐스팅

Any 타입에서 다른 타입의 멤버에 접근하고 싶을때 사용

var name: Any = "Sodeul"

if var name = name as? String {
    name.append("-_-")
}

참조
개발자 소들이

0개의 댓글