728x90
가변 파라미터, Variadic Parameters
함수에선 가변 파라미터라는 0개 이상의 특정 타입의 값을 허용한다.
- 함수가 호출될 때 여러 개의 입력 값을 전달할 수 있음
- 파라미터 타입 이름 뒤에 세 개의 간격 문자(...)를 추가하여 작성
- 여러 개의 가변 파라미터를 가질 수 있음
func sumOfArray(numbers: Int...) -> Int {
numbers.reduce(0, +)
}
func sumOfTwoArray(numbers1: Int..., numbers2: Int...) -> Int {
(numbers1 + numbers2).reduce(0, +)
}
print(sumOfArray(numbers: 1, 2, 3, 4, 5))
print(sumOfTwoArray(numbers1: 1, 2, 3, 4, 5, numbers2: 1, 2, 3, 4, 5))
// 15
// 30
함수 타입
모든 함수는 파라미터와 반환 타입으로 구성된 특정 타입을 지님
예를 들어, 아래 함수는 (Int, Int) -> Int 타입
func addTwoInts(_ a: Int, _ b: Int) -> Int {
return a + b
}
func multiplyTwoInts(_ a: Int, _ b: Int) -> Int {
return a * b
}
함수 타입 사용
변수에 함수 타입을 할당할 수 있고, 함수 타입을 다른 타입처럼 사용할 수 있다.
- 여기에 같은 타입을 갖는 함수를 할당하여 호출할 수 있음
var mathFunction: (Int, Int) -> Int = addTwoInts
print("Result: \(mathFunction(2, 3))")
// Prints "Result: 5"
mathFunction = multiplyTwoInts
print("Result: \(mathFunction(2, 3))")
// Prints "Result: 6"
- mathFunction은 (Int, Int) -> Int 타입을 갖는 변수
파라미터로 함수 타입 사용
함수 타입을 다른 함수의 파라미터로 사용할 수 있다.
func printMathResult(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
print("Result: \(mathFunction(a, b))")
}
printMathResult(addTwoInts, 3, 5)
// Prints "Result: 8"
반환 타입으로 함수 타입 사용
파라미터와 반대로 반환 타입 또한 함수 타입으로 사용할 수 있다.
func stepForward(_ input: Int) -> Int {
return input + 1
}
func stepBackward(_ input: Int) -> Int {
return input - 1
}
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
return backward ? stepBackward : stepForward
}
var currentValue = 3
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
while currentValue != 0 {
print("\(currentValue)... ")
currentValue = moveNearerToZero(currentValue)
}
print("zero!")
// 3...
// 2...
// 1...
// zero!
중첩 함수
위의 함수들은 모두 전역 함수이며, 함수 내의 함수인 중첩 함수를 선언할 수 있음
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
func stepForward(input: Int) -> Int { return input + 1 }
func stepBackward(input: Int) -> Int { return input - 1 }
return backward ? stepBackward : stepForward
}
var currentValue = -4
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
// moveNearerToZero now refers to the nested stepForward() function
while currentValue != 0 {
print("\(currentValue)... ")
currentValue = moveNearerToZero(currentValue)
}
print("zero!")
// -4...
// -3...
// -2...
// -1...
// zero!
참고
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/functions
728x90