Swift의 Any, AnyObject와 함수 타입
여러 타입을 담는 Any와 클래스 인스턴스만 받는 AnyObject의 차이, 매개변수 표현과 일급 객체로서의 함수를 정리합니다.

Swift는 정적 타입 언어이지만 여러 종류의 값을 다뤄야 할 때 Any와 AnyObject를 제공한다. 함수 역시 타입을 가지므로 변수에 저장하거나 다른 함수에 전달할 수 있다.
Any와 AnyObject
Any는 값 타입과 참조 타입을 포함한 모든 타입을, AnyObject는 클래스 인스턴스만 담는다.
var value: Any = 100
value = "Swift"
final class Profile {}
var object: AnyObject = Profile()
var optionalValue: Any? = nil
구체적인 타입 정보가 사라져 사용할 때 캐스팅이 필요하므로 범위를 좁혀 쓰는 것이 좋다. nil을 저장하려면 옵셔널로 선언해야 한다.
매개변수와 함수 타입
func greet(_ name: String, job: String = "designer") {
print("Hi, I'm \(name), \(job).")
}
let action: (String, String) -> Void = greet
action("snack", "developer")
func run(_ action: (String, String) -> Void) {
action("snack", "designer")
}
기본값은 호출의 반복을 줄이고 전달인자 레이블은 값의 역할을 명확히 한다. 함수는 변수에 저장하고 매개변수로 전달하거나 반환할 수 있는 일급 값이다.