Any, AnyOvject와 nil
- Any
- 스위프트의 모든 데이터 타입을 사용할 수 있다는 뜻,
- 근데 꼭 좋은것 만은 아니다.
- Any타입도 타입이기 때문에, 어떤 Any타입 변수에다가 123.12를 넣는다고 하더라도, 다른 Any변수에 넣을 수 없다.
- Any에 여러 String, Int, Float가 속한게 아니고, 그냥 별개의 타입일 뿐이다.
- AnyObject
- Any보다는 조금 한정된 의미
- 클래스의 인스턴스만 할당될 수 있따.
- 이것도 가능한 한 사용하지 마라.
- Nil
- 특정 타입이 아니라 ‘없음’을 나타내는 Swift의 키워드
- 변수 또는 상수에 값이 들어있지 않고 비어있음을 나타내는데 사용한다.
- 여기에 접근하면 잘못된 메모리 접근으로 런타임 오류가 발생한다.
타입 캐스팅과 타입 검사
- Swift코드를 작성할 때 컴파일러가 "어떤 값의 특정 타입을 식별하지 못하는 경우"가 발생할 것이다.
- 이럴 경우는 메서드나 함수가 반환하는 값이 불분명하거나 예상되지 않은 타입의 값일 때 종종 발생한다.
- 이럴 때는 as 키워드를 사용하여 코드가 의도하는 값의 타입을 컴파일러가 알 수 있게 해야 한다.
업캐스팅
- 타입캐스팅의 두 가지 형태 중 하나
- 특정 클래스의 객체가 상위 클래스들 중의 하나로 변형되는 것
- as 키워드를 사용해, 이러한 변환은 성공할 것이라고 줌.(보장된 변환)
- UIControl에는 자식들이 UISlider과 UIButton이 있는데, UIButton을 UIControl로 업캐스팅 가능하다.
- 아부지 뭐하시노? 오 너 걔 아들이여?? 오키오키 너 오키 약간 이런 느낌이라고 하신단다.
다운캐스팅
- 안전하게 수행된다거나 유효하지 않은 변환시도를 컴파일러가 잡아낼 것이라는 보장을 할 수 없다.
- 컴파일러가 발견하지 못했다면, 대부분 런타임에서 에러가 발생할 것이다.
- As!를 사용하여 그 클래스의 하위 클래스로 변환.(강제 변환)
- 여기서 옵셔널 바인딩 기법을 사용할 수 있다. 물음표를 사용 한다!