스위프트의 모든 함수는 파라미터 타입과 반환 타입으로 구성된 특정 함수 타입이 있다.
func printHelloWorld() {
print("Hello, world")
}
//다음 예제는 파라미터 또는 반환값이 없는 함수인데,
//이 함수의 타입은 () -> Void 또는 함수는 파라미터가 없고 Void를 반환한다 라고 말한다.
var aFunction : (Int, Int) -> Int = addTwoInts
//이 친구는 이렇게 읽힌다. "2개의 Int값과 Int를 반환하는 함수타입을 가지는 aFunction이라는 변수를 정의한다. addTwoInts라는 함수를 참조하기 위해서 새로운 변수에 설정하세요."
print("Result: \(aFunction(2, 3)")
//다음과 같이 해주게 되면 5를 반환한다.
func printMathResult(_ aFunction: (Int, Int) -> Int, _ a : Int, _ b : Int) {
print("Result: \(mathFunction(a, b))")
}
//함수타입을 파라미터로 전달하여 함수를 호출할 수 있다.
printMathResult(addTwoInts, 3, 5)
//다음과 같이 함수 타입을 통째로 넘겨서 함수안에서 함수를 구현 가능하다.
func stepForward(_ input: Int) -> Int {
return input + 1
}
func stepBackward(_ input : Int) -> Int {
return input - 1
}
func chooseStepFunction(backword : Bool) -> (Int) -> Int {
return backward ? stepBackword : stepForward
}
//다음 함수의 반환타입은 다소 복잡하게 보인다. 이는 Int타입을 파라미터로 받아서 Int를 반환하는 함수타입을 반환한다는 의미이다.
//첫 화살표 뒤 부분이 기본적인 반환의 기준이 되는 지점이다.
func chooseStepFunction(backward : Bool) -> (Int) -> Int {
func stepForward(input : Int) -> Int {return input + 1}
func stepBackword(input : Int) -> Int {return input - 1}
return backward ? stepBackward : stepForward
}