let anyTest: [Any] = [
123,
"123",
true,
12.3,
TestClass1(),
TestStruct1(),
TestEnum.test
]
for item in anyTest {
print(item)
}
Any는 모든 타입과 구조체, 클로저, 클래스, 열거형 등 모든 인스턴스를 담을 수 있다.
let anyObjectTest: [AnyObject] = [
TestClass1(),
TestStruct1() // 에러
123, // 에러
"123", // 에러
true, // 에러
12.3 // 에러
]
for item in anyTest {
print(item)
}
AnyObject는 오직 클래스타입의 인스턴스만 담을 수 있음.
Swift는 Type에 굉장히 민감한 언어이기에 사용을 자제해야함.
또한, Any타입으로 선언된 녀석을 사용하려면 매우 까다롭다.
타입은 컴파일 후에 정해지기 때문에 내장된 메서드 같은걸 사용하지 못함.
let typeCasting = anyTest[0] as? Int
이런식으로 타입캐스팅 한 후에나 사용할 수 있게 되고, 옵셔널도 추가적으로 신경을 쓰게 된다.
즉 유지보수 측면에서나, 코드적인 측면에서나 Any타입으로 변수나 상수를 만드는건 최대한 피해야한다.
let mcflurry = TestClass1()
class TestClass1 {
let str: String = "str" // 프로퍼티
func sayHello() { // 메서드
print("Hello")
}
}