1. 매개변수 기본값
- 매개변수의 기본값 지정 가능(기본값 가질 경우 매개변수 목록 중 뒤쪽에 위치하는 것이 좋음)
func 함수명(매개변수1: 타입, 매개변수2: 타입 = 기본값 ...) -> 반환타입 {
return 반환값
}
func greeting(friend: String, me: String = "gildong") {
print("Hello \(friend)! I'm \(me)")
}
greeting(friend: "Bale") //기본값을 가지는 매개변수는 생략 가능
greeting(friend: "Bale", me: "Kane")
2. 전달인자 레이블
- 함수 호출시 사용자 입장에서 매개변수 역할을 명확히 표현(함수 호출시 사용하는 호칭)
- 전달인자 레이블을 다르게 하면 동일한 이름의 함수 중복생성 가능
func 함수명(전달인자 레이블 매개변수1: 타입, 전달인자 레이블 매개변수2: 타입...) -> 반환타입 {
return 반환값
}
func greeting(to friend: String, from me: String) {
print("Hello \(friend)! I'm \(me)") //함수 내부에서는 매개변수명 사용
}
greeting(to: "Johnson", from: "Sonny") //함수 호출시 전달인자 레이블 사용
greeting(friend: "Jackson", me: "Sonny")
3. 가변 매개변수
- 매개변수 값의 개수를 알기 어려울때 사용
- 함수당 하나만 가질 수 있음
- 기본값이 있는 매개변수와 마찬가지로 매개변수 목록 중 뒤쪽에 위치하는 것이 좋음
func 함수명(매개변수1: 타입, 전달인자 레이블 매개변수2: 타입...) -> 반환타입 {
return 반환값
}
func sayHelloToFriends(me: String, friends: String...) -> String {
return "Hello \(friends)! I'm \(me)"
}
print(sayHelloToFriends(me: "Harry", friends: "Bale", "Johnson", "Loyal"))
print(sayHelloToFriends(me: "Harry"))
// * 반환값 없는 함수, 매개변수 기본값, 전달인자 레이블, 가변 매개변수 모두 섞어서 사용 가능
4. 데이터 타입으로서의 함수
- swift는 함수형 프로그래밍을 포함하는 다중 패러다임 언어.
- swift의 함수는 일급객체(다른 객체에 일반적으로 적용 가능한 연산을 모두 지원하는 객체)
- 함수의 반환 타입은 생략할 수 없음
var someFunction: (String, String) -> Void = greeting(to:from:)
someFunction("eric", "scott")
func runAnother(funcion: (String, String) -> Void) {
function("Van", "Miki")
}
runAnother(function: greeting(friend:me:))
runAnother(function: someFunction)