Swift - Function 5

 

Swift의 함수 정리 5 - 매개변수 Type, return Type으로서의 함수 Type과 중첩 함수

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)
}