3 분 소요

함수

1

함수의 자료형은

(매개변수의_자료형, 매개변수의_자료형, …) → 리턴형

로 이루어짐

2

함수는 만들 때 내부 매개변수와 외부 매개변수 두 가지를 정해줄 수 있다.

함수 이름
함수명(외부 매개변수: 외부 매개변수:)

디폴트 매개변수

디폴트 매개 변수을 가지는 것이 가능하다.

func sayHello(count: Int, name: String = "길동") -> String {
return ("\(name), 너의 번호는 \(count)")
}
var message = sayHello(count:100)
print(message) //길동, 너의 번호는 100

다음 예와 같이 = 에 기본적으로 값을 넣어줄 수 있으며,

함수를 호출할 때 굳이 매개변수 값을 넣지 않으면 자동으로 저 값을 사용하게된다.

여러개의 값을 반환하기

Tuple을 리턴 값으로 하여 여러 개의 값을 동시에 반환할 수 있다.

Tuble을 리턴 값으로 사용하려면 반환_값의 자료형이 Tuple임을 명시해주고 Tuple로 반환해주면 된다.

func converter(length: Float) -> 
	(yards: Float, centimeters: Float, meters: Float, mylength: Float) // 반환값 Tuple로 명시
{
   let yards = length * 0.0277778
   let centimeters = length * 2.54
   let meters = length * 0.0254
   let mylength = length * 50
   return (yards, centimeters, meters, mylength)
}
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
print(lengthTuple.mylength) // 500.0


다음과 같은 예제를 만들어 볼 수 있다

import Foundatio // String을 사용하기 위해 필요

func sss(x : Int, y : Int) -> (sum : Int, sub : Int, mul : Int, div : Double,rem : Int)
{
let sum = x+y
let sub = x-y
let mul = x*y
let div = Double(x)/Double(y) //같은 자료형만 연산 가능
let rem = x%y 
return (sum, sub, mul, div, rem)
}
var result = sss(x:10,y:3)
print(result.sum) // 13
print(result.sub) // 7
print(result.mul) // 30
print(String(format: "%.3f", result.div)) // 3.333
print(result.rem) // 1


가변 매개변수

매개변수 자료형 옆에 을 붙이면 몇 개든지 받을 수 있다.

이를 통해 다음과 같은 예제를 만들 수 있다.

func add (numbers : Int...)
{
   var sum = 0
   for num in numbers
   {
      sum += num
   }
   print(sum)
}

add(numbers : 1,3,5,6,7,8,9,4,3,5,1,3,5,7,7) // 모든 숫자가 더해서 출력됨


print함수 이해하기

print 함수는 다음과 같다.

func print(
    _ items: Any...,
    separator: String = " ",
    terminator: String = "\n"
)

함수를 배우며 이해한 내용을 토대로 print함수를 보면

_ 는 외부 매개변수를 생략하는 기호이고,

... 은 가변 매개변수로 매개변수를 몇 개든 받을 수 있다.

String 옆에 = 는 디폴트 매개변수로 매개변수를 지정해주지 자동으로 저 값을 사용한다.

InOut (Call By Reference)

InOut키워드를 통해 함수의 매개변수로 값을 주소로 넘겨서 변화된 값을 변수가 가질 수 있다.

InOut 키워드를 사용하려면 매개변수에 inout 키워드를 넣어주고

함수를 호출할 때 인자값에 &를 앞에 붙여 사용해야한다.

예제는 다음과 같다.

var myValue = 10
func doubleValue (value: inout Int) -> Int {
value += value
return(value)
}
print(myValue) // 10
print(doubleValue(value : &myValue)) //20 여기서 myValue값이 변화됨
print(myValue) // 20


1급 객체 또는 1급 시민

3

다음 코드를 통해 swift 함수가 1급 객체임을 확인할 수 있다.

func up(num: Int) -> Int {
return num + 1
}
func down(num: Int) -> Int {
return num - 1
}

// ----------------- 대입이 가능 ------------------------
let toUp = up
print(up(num:10))           // 11
//print(toUp(num:10))       // error: extraneous argument label 'num:' in call
print(toUp(10))             // 11  대입 후에는 argument label을 쓰지 않음

let toDown = down
print(down(num:10))         // 9
//print(toDown(num:10))     // error: extraneous argument label 'num:' in call
print(toDown(10))           // 9

// 함수의 자료형은 (자료형 나열) -> 리턴형
print(type(of:up))          //(Int) -> Int
print(type(of:toUp))        //(Int) -> Int

// ----------------- 매개변수로 전달 가능 ----------------------

func upDown(Fun: (Int) -> Int, value: Int) { // 함수를 매개변수로 전달 
let result = Fun(value)
print("결과 = \(result)")
}
upDown(Fun:toUp, value: 10)     //toUp(10)      결과 = 11
upDown(Fun:toDown, value: 10)   //toDown(10)    결과 = 9

// ---------------- 리턴 값으로 사용할 수 있다. ----------------------

//매개변수 자료형 bool 리턴형 (Int) -> Int의 함수
func decideFun(x: Bool) -> (Int) -> Int { 
//매개변수형 리턴형이 함수형
if x {
return toUp
} else {
return toDown
}
}

var r = decideFun(x:true)   // r = toUp
print(type(of:r))           //(Int) -> Int
print(r(10))                // toUp(10)         // 11
r = decideFun(x:false)      // r = toDown
print(type(of:r))           //(Int) -> Int
print(r(10))                // toDown(10)       // 9


guard문

4

5

6

태그: ,

카테고리:

업데이트:

댓글남기기