-
[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, AnyObjectObjective-C의 NSObject와 유사합니다. AnyObject타입을 반환하는 메소드는 모든 타입의 클래스를 반환할 수 있다는 의미로 해석되기도 합니다.func move(param:AnyObject) -> AnyObject{
return param
}
배열이나 딕셔너리에도 AnyObject타입을 사용하여 모든 클래스를 저장할 수 있습니다.
Any는 AnyObject와 유사합니다. AnyObject는 클래스에 한해서 사용되지만 Any는 스위프트의 모든 타입에 대해 사용됩니다.
출처 : 꼼꼼한 재은씨의 스위프트2 프로그래밍
'앱등이에게 살충제를 뿌린다. > Swift' 카테고리의 다른 글
[Swift] static 함수와 class 함수! static func vs class func (7) 2016.07.20 [Swift] String의 subString을 subscript로 구현해보자. (0) 2016.05.01 [Swift] Objective-C 오픈소스(AFNetworking 2.0)를 Swift에 적용시켜보자 (0) 2016.03.21 [Swift] Set(집합)이라는 컬렉션 (0) 2015.11.11 [Swift] guard가 if보다 나은 이유? (2) 2015.11.10