1. 중첩함수

기존의 C, C++에서는 함수안에서 다른 함수를 호출하는 것이 일반적이었습니다. 그러나 Swift에서는 함수 안에 함수를 넣어 구현을 할 수 있습니다.

Swift에서 특별한 위치에 속해 있지 않는 한 모두 전역 함수

So → 특히 전역함수가 많은 프로그램에서는 중첩함수를 이용하면 함수 사용범위를 좀 더 명확하게 표현해줄 수 있는 장점

Untitled

@discardableResult func myWeight(weight: Int) -> Int {
    lazy var weightChange: Int = weight
    func diet(weight: Int) {
        weightChange =  weight - 10
        print("다이어트를 해서 10kg로 빠져 \\(weightChange)가 되었어요!")
    }
    func bulkUp(weight: Int) {
        weightChange =  weight + 10
        print("벌크업을 해서 10kg로 쪄서 \\(weightChange)가 되었어요!")
    }
    
    (weight > 80) ? diet(weight: weight) : bulkUp(weight: weight)
    return weightChange
}

myWeight(weight: 90) // 다이어트를 해서 10kg로 빠져 80가 되었어요!
myWeight(weight: 60) // 벌크업을 해서 10kg로 쪄서 70가 되었어요!

2. 비반환 함수

종료되지 않는다는 것은 return 되지않고 비정상적으로 끝나는 함수를 뜻합니다. 오류를 던지고 중대한 시스템 오류를 보고한 후 프로세스를 종료하기 위해서 생겨났습니다. 비반환 함수는 어디서든 호출이 가능하고 반환타입을 Never로 명시하여 정의합니다.

가장 대표적인 예시는 fatalError이다! fatalError는 호출 즉시 크래시를 발생시키고 이때 반환타입으로 Never을 활용해서 비반환함수를 구현할 수 있다.

Untitled

3. 반환 값을 무시할 수 있는 함수

가끔 함수의 반환 값이 굳이 필요하지 않는 경우가 있다. 이런 경우 함수의 반환값을 무시해도 된다는 @discardableResult 키워드를 붙여서 프로그래머가 의도적으로 반환값을 사용하지 않을 수 있다.

func sayHello() -> String {
		print("안녕 나의 기여밍")
		return "hello"
}

@discardableResult func sayHelloWithDiscardable() -> String {
		print("안녕 나의 기여밍")
		return "hello"
}

sayHello() //⚠️ Result of call to 'sayHello()' is unused (경고문) -> 출력이 되긴 함
sayHelloWithDiscardable() // "안녕 나의 기여밍"

4. 오늘의 질문

→ 위에 3개의 항목을 합친 코드를 짜보세요!

기본 문법 공부(함수 - 중첩 함수)

Swift 중첩함수

Swift) Never