스위프트의 함수

개요


메서드는 구조체나 클래스, 열거형등 다른 자료형에서 사용하는 함수를 메서드, 모듈 전체에서 사용할 수 있는 것을 함수라고 한다.

하는 역할은 같은 것이다.




함수


함수란 특정한 일을 수행하기 위한 코드들의 덩어리라고 할 수 있다.

이 덩어리에 이름을 붙여서 코드들을 실행한다.

1
2
3
4
func 함수이름(매개변수...) -> 리턴형 {
  코드
  return 리턴값
}

위와 같은 형태로 선언한다.

매개변수와 리턴형을 생략할 수 있다. c언어 함수에서 void형과 같이 사용이 가능한듯하다.



함수 기본


1
2
3
4
5
func hi(person: String) -> String {
  return "hi, " + person
}

print(hi(person: "kyujin"))



함수 파라메터 생략


1
2
3
4
5
func hi() -> String {
  return "hi, kyujin"
}

print(hi())



함수 파라메터 여러개


1
2
3
4
5
func hi(person1: String, person2: String) -> String {
  return "hi, " + person1 + person2
}

print(hi(person1: "kyujin", person2: "42seoul"))



함수 리턴값 생략


1
2
3
4
5
func hi() {
  print("hi, kyujin")
}

hi()



함수 리턴값 여러개


1
2
3
4
5
6
func minMax(array: [Int]) -> (min: Int, max: Int) {
  return (min, max)
}

var change = minMax(array: [1, 2])
print("max is \(change.min)")



함수 가변매개변수


1
2
3
func hi(person1: String, person2: String...){
  //코드
}



함수 라벨 생략


함수를 호출할 때 라벨링을 하고싶지 않다면 함수 선언에서 _를 붙이면된다.

1
2
3
4
5
func hi(_ person1: String, person2: String...){
  //코드
}

hi ("kyujin", person2: "42seoul")



함수 포인터 매개변수


inout 키워드를 사용하면 call by reference가 된다.

1
2
3
4
5
6
7
8
9
func swap(_ num1: inout String, _ num2: inout String){
  let tmp = num1
  num1 = num2
  num2 = tmp
}

var num1 = 10
var num2 = 20
swap(&num1, &num2)



비반환


1
2
3
func crash() -> Never {
  fatalError("Error")
}



반환값 미사용


1
2
3
4
5
@discardableResult func crash() -> String {
  return "Error"
}

crash()