고급함수

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개의 댓글

관련 채용 정보