Any, AnyObject
// 범용 자료형
// 코드의 유연성
// 남용할 경우 코드의 가독성 떨어지고 유지보수가 어려워진다.
// 가능하면 사용하지 않는 것이 좋지만
// 프레임워크에서 범용자료형을 사용하는 경우가 있기 때문에 그정도만 공부해보자
// Any : 모든 형식을 저장가능
// AnyObject : 모든 클래스를 저장가능(참조형식만 저장가능)
var data = 1 // Int 형식만 저장가능
// data = 2.3 // err
var data2: Any = 1
data2 = 2.3 // Any가 있기 때문에 저장 가능
data2 = "str"
data2 = [1, 2, 3]
data2 = NSString() // Any는 참조형식 저장가능 -> 값, 참조 형식을 가리지 않는다.
var obj: AnyObject = NSString()
// obj = 1 // 값형식을 저장하면 err
// Type-Erasing Wrapper
// 형식이 지워지다.
// Any와 AnyObject는 형식을 가지고 있지 않기 때문에
// 실제로 사용하려면 type casting이 필요하다.
if let str = data2 as? String {
print(str.count)
} else if let list = data2 as? [Int] {
print("배열")
}
Type Casting Pattern
// Type Casting Pattern으로 사용하면 더 깔끔해짐
switch data2 {
case let str as String:
print(str.count)
case let list as [Int]:
print(list.count)
case is Double: // 보통 as로 하지만 is도 가능
print("Double Value")
default:
break
}