728x90
함수의 기본개념 알아보러 가기 :
2021.03.10 - [공부/SWIFT] - [SWIFT] 함수
javascript와 마찬가지로 스위프트의 함수도 일급객체이다.(first-class object)
다른 데이터 타입과 마찬기지로
변수에 할당이 될 수 있고
함수의 인자(매개변수)로 전달이되며
return값으로 반환 할 수 있다.
함수타입으로 사용 할 수 있다.(함수타입을 작성할땐 전달인자 레이블 사용불가)
( 매개변수 타입 ) -> 반환타입
//함수타입으로의 사용
//두개의 Int를받아 Int를 반환하는 함수면 해당 함수타입을 사용가능
typealias CalculateTwoInt = ( Int, Int ) -> Int
//함수타입 작성시 전달인자 레이블을 작성할 수 없다.
//오류
let someFunction: (lhs: Int, rhs: Int) -> Int
//와일드카드( _ )는 전달인자 레이블 안써도 된다는 소리므로
let someFunction: (_ lhs: Int, _ rhs: Int) -> Int //ok
let someFunction: (Int, Int) -> Int //ok
함수의 형은 파라미터 형과(parameter types) 반환 형(return type)으로 구성 돼 있습니다. 아래 두 함수는 Int값 두 개를 입력받고 Int를 반환하는 함수입니다.
func addTwoInts(_ a: Int, _ b: Int) -> Int {
return a + b
}
func multiplyTwoInts(_ a: Int, _ b: Int) -> Int {
return a * b
}
// 입력 받는 파라미터와 반환 값이 없는 함수
func printHelloWorld() {
print("hello, world")
}
함수를 변수처럼 정의해서 사용할 수 있습니다.
// (Int,Int) -> Int 요게 함수형이란 표현
// 변수 mathFunction는 addTwoInts 함수의 인자 값과 반환 값이 같으므로
// 이 함수가 변수로 할당 될 수 있습니다.
// var mathFunction: (Int, Int) -> Int = addTwoInts
// 함수형 타입 사용
var mathFunction: CalculateTwoInt -> Int = addTwoInts
print("Result: \(mathFunction(2, 3))")
// Prints "Result: 5"
// multiplyTwoInts 함수도 mathFunction과 함수 형이 같으므로
// 할당해 사용할 수 있습니다.
mathFunction = multiplyTwoInts
print("Result: \(mathFunction(2, 3))")
// Prints "Result: 6"
파라미터에 함수 형을 사용할 수 있습니다.
func printMathResult(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
print("Result: \(mathFunction(a,b))")
}
printMathResult( addTowInts , 3, 5 )
// Prints "Result: 8"
함수를 반환하는 함수를 만들수도 있습니다.
//입력한 step에 하나를 더하거나 빼는 함수를 선언
func stepForward(_ input: Int) -> Int {
return input + 1
}
func stepBackward(_ input: Int) -> Int {
return input - 1
}
//backward함수가 true냐 false냐에 따라 위에서 선언한 적절한 함수를 반환하는 함수
func chooseStepFunction(backward: Bool) -> (Int) -> int {
return backward ? stepBackward : stepForward
}
var currentValue = 3
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
// moveNearerToZero는 이제 stepBackward() 함수를 가르키고 있습니다.
print("Counting to zero:")
// Counting to zero:
while currentValue != 0 {
print("\(currentValue)... ")
currentValue = moveNearerToZero(currentValue)
}
print("zero!")
// 3...
// 2...
// 1...
// zero!
중첩 함수(Nested Function) : 함수 중에는 다른 함수 안의 body에서 동작하는 함수
중첩함수는 함수 밖에서는 감춰져 있고 함수의 body내에서 접근 가능
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는 이제 중첩 돼 있는 stepForward() 함수를 가르킵니다.
while currentValue != 0 {
print("\(currentValue)... ")
currentValue = moveNearerToZero(currentValue)
}
print("zero!")
// -4...
// -3...
// -2...
// -1...
// zero!
'공부 > SWIFT' 카테고리의 다른 글
[SWIFT] 옵셔널( Optional ) ★★★★★ (0) | 2021.03.11 |
---|---|
[SWIFT] 함수(종료되지 않는 함수, 반환값을 무시할 수 있는 함수) (0) | 2021.03.11 |
[SWIFT] 함수(기본, 다양한 함수선언) (0) | 2021.03.10 |
[SWIFT] 제어문( 반복문 while, repeat-while ) (0) | 2021.03.10 |
[SWIFT] 제어문( 반복문 for-in ) (0) | 2021.03.10 |