Language/Swift

swift nested function

jaewpark 2022. 8. 22. 12:43

swift 함수는 중첩하여서 작성을 할 수 있습니다.

함수 내 작성할 수 있는 Inner functio의 수는 제한이 없지만, 많아질수록 구조가 복잡하고 유지보수가 힘든 코드가 됩니다.

Inner function은 Outer function이 호출되었을 때, 생성되었다가 소멸됩니다( Life Cycle )

 

말보다는 코드로 쉽게 이해를 하는 게 좋을 거 같습니다.

// outer function
func addNumbers(_ num1: Int, _ num2: Int) {
  print("Addition")

  // inner function
  func display(num1: Int, num2: Int) {
      print("\(num1) + \(num2) =", num1 + num2)
  }

  // calling inner function with two values
  display(num1: num1, num2: num2)
}

// calling outer function
addNumbers(5, 1)

/* resulut is
* 5 + 1 = 6
*/

위와 같이 함수 내부에서 함수를 동작하는 것인데, 내부적으로 공통적으로 쓰는 것을 함수로 만들어서 사용하면 괜찮을 거 같습니다.

또 다르게 내부 함수를 반환하기도 합니다.

 

func operations(param: Character) -> (Int, Int) -> Int {
    func addNumbers(_ num1: Int, _ num2: Int) -> Int {
        print("\(num1) + \(num2) =", num1 + num2)
        return num1 + num2
    }

    func subNumbers(_ num1: Int, _ num2: Int) -> Int {
        print("\(num1) - \(num2) =", num1 - num2)
        return num1 - num2
    }

    return param == "+" ? addNumbers(_:_:) : subNumbers(_:_:)
}

let addOperation = operations(param: "+")
let subOperation = operations(param: "-")

var _ = addOperation(100, 1)
var _ = subOperation(1, 11)

함수를 반환 위와 같이 사용을 할 수가 있습니다.

어떻게 사용할 지는 감이 안오지만, 이렇게도 활용할 수 있다는 게 재밌는 거 같습니다