함수
- 작업의 가장 작은 단위이자 코드의 집합
- 반복해서 수행되는 작업에 사용
- 1개의 기능을 1개의 함수로 쓰는게 가장 적절함
- 기본 작성법
func 함수명(파라미터 이름 : 데이터타입) -> 반환타입 {
return 반환값
}
- 매개변수(파라미터)가 여러 개인 경우는 쉼표로 구분
func 함수명(파라미터1 이름 : 데이터타입, 파라미터2 이름 : 데이터타입) -> 반환타입 {
return 반환값
}
func 함수명() -> 반환타입 {
return 반환값
}
- 반환값이 없는 경우 반환타입에 Void 표기 or 생략
func 함수명(파라미터 이름 : 데이터타입) {
return
}
func 함수명(파라미터 이름 : 데이터타입) -> Void {
return
}
func sendMessage(myName: String, name: String) -> String {
return "Hello \(name), I am \(myName)."
}
전달인자 레이블을 통한 함수 정의
func 함수명(전달인자 레이블: 매개변수 이름 : 매개변수 타입, 전달인자 레이블: 매개변수 이름 : 매개변수 타입, ... ) -> 반환타입 {
return 반환값
}
- 전달인자 레이블을 사용하면 사용자 입장에서 매개변수의 역할을 좀 더 명확하게 표현 가능하다.
func sendMessage(from myName: String, to name: String) -> String {
return "Hello \(name), I am \(myName)."
}
- 기존언어처럼 전달인자 레이블을 사용하고 싶지 않을 경우,
와일드카드(wildcard) 식별자(_) 사용
→ 이자리에 뭐가 오든 상관하지 마라
func sendMessage(_ myName: String, _ name: String) -> String {
return "Hello \(name), I am \(myName)."
}
- 스위프트 함수의 경우 매개변수로 몇개의 값이 들어올 지 모를 때 가변매개변수 사용한다.
- 가변매개변수는 0개 이상의 값을 받아올 수 있다.
- 가변매개변수로 들어온 인자값은 배열처럼 사용 가능하다
→ 가변매개변수로 선언받으면 값을 배열로 넘겨받는다.
- 함수마다 가변매개면수는 1개만 가질 수 있다.
func sendMessage(_ myName: String, _ name: String...) -> String {
return "Hello \(name), I am \(myName)."
}
sendMessage(myName: "Muller", name: "Pep", "Klopp", "Ancelotti")
- 스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어이기 때문에 스위프트의 함수는 1급 객체이다.
→ 함수를 변수, 상수등에 할당 혹은 매개변수로 전달 가능