중첩 함수
스위프트는 함수 내부에 또 다른 함수를 생성 가능.
외부 함수의 생성과 소멸을 내부 함수는 같이 함
중첩 함수의 사용
func outerFunction() {
print("Outer Function")
func innerFunction() {
print("Inner Function")
}
}
outerFunction()
// Outer Function
만약에 외부에서 innerFunction()에 접근한다면?
범위내에서 찾을 수 없다는 오류 발생
innerFunction()
// cannot find 'innerFunction' in scope
그럼 내부 함수도 실행하고 싶다면?
func outerFunction() -> () -> () {
print("Outer Function")
func innerFunction() {
print("Inner Function")
}
return innerFunction
}
let check = outerFunction()
check()
// Outer Function
// Inner Function
여기서 outerFunction 함수를 보면
() 는 빈 값을 뜻하고,
() -> () 리턴하고자 하는 함수의 타입을 말함
func outerFunction() -> () -> ()
outerFunction 함수의 리턴 값을 받아서 실행하면
inerrFunction 함수의 출력값도 반환됨
let check = outerFunction()
check()
// Outer Function
// Inner Function
★여기서 check이라는 변수에는 outerFunction 함수의 결과 값을 대입하는게 아니라
함수 타입을 저장함 이때, 함수에 전달인자 레이블은 작성하지 않음 ★
중첩함수 사용
typealias UpDownFunc = (Int) -> Int // 타입 별칭
func funcForMove(shouldGoUP: Bool) -> UpDownFunc { // 반환 타입이 함수
func goUp(currentFloor: Int) -> Int {
return currentFloor + 1
}
func goDown(currentFloor: Int) -> Int {
return currentFloor - 1
}
return shouldGoUP ? goUp : goDown
}
var currentFloor: Int = 10
var targetFloor: Int = 8
let moveToTarget: UpDownFunc = funcForMove(shouldGoUP: currentFloor<targetFloor)
while currentFloor != targetFloor {
print("현재 \(currentFloor) 층...")
currentFloor = moveToTarget(currentFloor)
}
print("띵! \(currentFloor)층 도착.")
// 현재 10 층...
// 현재 9 층...
// 띵! 8층 도착.
'iOS > Swift' 카테고리의 다른 글
구조체 (0) | 2024.01.17 |
---|---|
옵셔널 (0) | 2024.01.16 |
함수 2편 (매개변수, 데이터 타입) (0) | 2024.01.14 |
함수 1편 (함수 정의 및 호출) (0) | 2024.01.14 |
흐름 제어 (반복문) (0) | 2024.01.12 |