고급함수

Gooreum·2021년 10월 28일
0

Swift

목록 보기
6/16

디폴트 매개변수(argument) 정의하기

  • argment로 전달하는 값이 없는 경우, 디폴트 매개변수 값을 사용.
  • 함수를 선언할 때 매개변수에 디폴트 값을 할당
  • 이름이 인자로 전달되지 않을 경우에 디폴트로 "길동"이라는 문자열이 사용되도록 함.
    func sayHello(count: Int, name: String = "길동") -> String {
    		return ("\(name), 너의 번호는 \(count)")
    }
    • 이름을 가지고 함수를 호출하면 argument를 사용

      var message = sayHello(count: 10, name: "소프트")
      //-> 소프트, 너의 번호는 10
    • 이름을 전달하지 않고도 호출 가능하며 디폴트로 "길동"을 사용

      var message = sayHello(count: 100)
      print(message) //길동, 너의 번호는 100

함수로부터 여러 개의 결과 반환하기

  • 함수는 여러 결과 값들을 튜플로 감싸서 반환할 수 있음.
    • 인치 단위의 수를 매개변수로 받아 야드, 센티미터, 미터로 변환하고 이 세 개의 값을 하나의 튜플에 넣어 반환해보자.

      func converter(length: Float) -> (yards: Float, centimeters: Float, meters: Float) {
      		let yards = length * 0.0277778
      		let centimeters = length * 2.54
      		let meters = length * 0.0254
      		return (yards, centimeters, meters)
      }
      
      var lengthTuple = converter(length: 10)
      print(lengthTuple)  // (yards: 0.277778, centimeters: 25.4, meters: 0.254)
      print(lengthTuple.yards)  // 0.277778
      print(lengthTuple.centimeters)  // 25.4
      print(lengthTuple.meters) // 0.254

가변 매개변수(variadic parameter)

  • 함수가 가변 매개변수를 받는다는 것을 가리키기 위해서 세 개의 점(...)을 사용
    • 지정되지 않은 개수의 String 값을 매개변수로 받아서 콘솔에 출력해보자.

      func displayStrings(strings: String...) {
      	for string in strings {
      		print(string)
      	}
      }
      
      displayStrings(strings: "일", "월", "화", "수")

inout매개변수: call by reference 구현

  • swift는 기본적으로 call by value
  • swift에서 call by reference를 구현하는 방법
    • 함수가 값을 반환한 후에도 매개변수에 일어난 변화를 유지하려면, 함수의 선언부에서 매개변수를 입출력 매개변수(inout parameter)로 선언해야 함.

      var myValue = 10
      
      //1. inout사용
      func doubleValue ( value: **inout** Int) -> Int {
      	value += value
      	return value
      }
      
      print(myValue) // 10
      print(doubleValue(value: &myValue)) //20
      print(myValue) //20
      
      //2.inout 사용안함
      func doubleValue ( value:  Int) -> Int {
          value += value //컴파일 에러 남.
          return value
      }
    1. call by reference하고 싶은 매개변수의 자료형 앞에 inout 사용하면 됨.
    2. 매개변수 value는 기본적으로 let으로 선언되어 있기 때문에 inout 사용하지 않으면 매개변수 자체를 변경 불가하다.
profile
하루하루 꾸준히

0개의 댓글