Any, AnyObject

냐옹·2024년 7월 15일
0

IOS

목록 보기
26/32

Any, AnyObject

  • 범용타입이다.

  • 타입캐스팅을 수행할 때 일반적으로 상속 관계에 있는 클래스끼리만 캐스팅이 가능하다.

  • 그러나, Any, AnyObject타입인 경우 상속 관계가 아니어도 타입 캐스팅을 할 수 있다.

  • 상속관계에 있을 때, 업캐스팅(as), 다운캐스팅(as?, as!)을 할 수 있다.

  • 근데, AnyAnyObject타입인 경우 상속관계가 아니어도 타입 캐스팅을 할 수 있다.

  • 런타임 시점에 타입이 결정된다.

Any

  • Swift자료형에 민감한 언어이다.
  • Any는 모든 타입을 저장할 수 있는 자료형
var things : [Any] = []

things.append(1)
things.append(1.0)
things.append("Johnson")
things.append(false)
things.append((Human.init()))
things.append({ print("I am Johnson")})

Any 타입에는 값 타입 (구조체, 열거형), 참조타입 (클래스, 클로저) 모두 섞어서 저장이 가능하다.

AnyObject

  • 모든 클래스 타입을 저장
  • Any보다 조금 더 까다로움
  • 클래스 타입만 저장할 수 있다.
var things : [AnyObject] = []

things.append(1)                                // Argument type 'Int' expected to be an instance of a class
things.append(1.0)                              // Argument type 'Double' expected to be an instance of a c
things.append(Teacher.init())
  • 저장하려는 객체의 타입이 클래스이기만 하면 된다.

사용

  • Any나 AnyObject는 런타임 시점에 타입이 결정되기 때문에, 컴파일 시점에 위와 같이 해당 타입에 대해서 알 수 없다. 때문에 해당 타입의 멤버에도 접근할 수 없다.

  • 만약에 Any타입인 name을 String으로 사용하고 싶다면

if var name = name as? String{
	name.append("_")
}
  • 사용 시에 기본적으로 조심하는 것이 좋다.
  • swift는 기본적으로 자료형에 민감하기 때문에, 왠만하면 AnyAnyObject는 사용을 지양하는 것이 좋긴하다.

출처 : https://babbab2.tistory.com/128

0개의 댓글