-
프로그래밍 함수에서는 int, float 같은 데이터 타입 인자 뿐만 아니라 함수를 전달할 수도 있는데 swift에서도 동일하게 가능하다. 함수의 인자로는 이미 있는 함수를 넣을 수 있고 뿐만 아니라 클로저(closure)의 형태로 익명의 함수(anonymous)를 만들어서 쓰는 것도 가능하다. 예로 아래에 있는 코드들은 모두 동일한 기능을 하는데 함수를 전달하는 것과 다른 클로저 형태를 사용한 것만 다르다. 자바나 코틀린을 써본 사람들은 람다 함수라는 이름으로 이미 익숙할 것이다.
func calculator (n1: Int, n2: Int, operation: (Int, Int) -> Int) -> Int { return operation(n1, n2) } func multiply(no1: Int, no2: Int) -> Int { return no1 * no2 } let res1 = calculator(n1: 2, n2: 3, operation: multiply) let res2 = calculator(n1: 2, n2: 3, operation: { (no1: Int, no2: Int) -> Int in return no1 * no2 }) let res3 = calculator(n1: 2, n2: 3, operation: { (no1, no2) in no1 * no2 }) let res4 = calculator(n1: 2, n2: 3, operation: { $0 * $1 }) print("res1: \(res1) res2: \(res2) res3: \(res3) res4: \(res4)")
클로저를 쓰면 함수를 짧고 유연하게 만들 수 있다는 장점이 있다. 하지만 $0, $1 까지 사용하면 가독성(readability)이 떨어질 수도 있기 때문에 적재적소에 사용하는 것이 좋겠다.