Function - 5
매개변수 Type으로써의 함수 Type
(int, int) -> int
와 같은 함수 Type은 다른 함수의 매개변수 Type으로도 사용할 수 있다.- 이렇게 하면 함수의 일부 구현 내용을 함수를 호출할 때 함수를 호출하는 쪽에서 제공하도록 구현할 수 있다.
func printMathResult(_ mathFunction: (int, int) -> int, _a: int, _ b: int) {
print("Result \(mathFunction(a, b))")
}
printMathResult(addTwoInts, 3, 5)
// "Result 8" 출력
Return Type으로서의 함수 Type
- 함수 Type은 다른 함수의 return Type으로도 사용 가능하다.
- 아래 예제는 chooseStepFunction() 함수 호출시 true를 넘기면 stepBackward() 함수를 false를 넘기면 stepForward() 함수를 리턴한다.
func stepForward(_ input: int) -> int {
return input + 1
}
func stepBackward(_ input: int) -> int {
return input - 1
}
func chooseStepFunction(backword: Bool) -> (int) -> int {
return backword ? stepBackward : stepForward
}
중첩 함수
- 중첩 함수는 함수의 body 안에서 함수를 선언하는 것이다.
- 중첩 함수는 기본적으로 외부로부터 감춰지나 자신을 둘러싼 함수로부터 호출되거나 사용될 수 있다.
- 함수를 둘러싼 함수는 그 안에 선언된 함수를 외부에서 사용할 수 있도록 리턴할 수 있다.
func chooseStepFunction(backword: Bool) -> (int) -> int {
func stepForward(_ input: int) -> int { return input + 1 }
func stepBackward(_ input: int) -> int { return input - 1 }
return backword ? stepBackward : stepForward
}
var currentValue = -4
let moveNearerToZero = chooseStepFunction(backword: currentValue > 0)
while currentValue != 0 {
print("\(currentValue)...")
currentValue = moveNearerToZero(currentValue)
}