매개변수에 기본적으로 전달될 값을 미리 지정할 수 있음. 기본값을 갖는 매개변수는 매개변수 목록 중에 뒤쪽에 위치하는 것이 좋음.
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 = 매개변수 기본값...) -> 반환타입 { /*함수구현부*/ return 반환값 }
//eg.1//
func greeting(friend: String, me: String = "nylonmask") {
print("Hello \(friend)! I'm \(me)")
}
//eg.2. 매개변수의 기본값을 가지는 매개변수는 생략 가능//
greeting(friend: "hana")//Hello hana! I'm nylonmask
greeting(friend: "john", me: "eric") //Hello john! I'm eric
함수를 호출할 때 함수 사용자의 입장에서 매개변수의 역할을 좀 더 명확하게 표현하고자 할 때 사용
//함수 내부에서 전달인자를 사용할 때, 매개변수 이름을 사용//
func greeting(to friend: String, from me: String) {
print(Hello \(friend)! I'm \(me)")
//함수를 호출할 때에는 전달인자 레이블을 사용//
greeting(to: "hana", from: "nylonmask")
전달 받을 값의 개수를 알기 어려울 때 사용. 가변 매개변수는 함수당 하나만 가질 수 있음.
//eg.1//
func sayHelloToFriends(me: String, friends: String...) -> String {
return "Hello \(friends)! I'm \(me)"
}
print(sayHelloToFriends(me: "nylonmask", friends: "hana", "eric", "wing"))
//Hello ["hana", "eric", "wing"]! I'm nylonmask
print(sayHelloToFriends(me: "nylonmask")
//Hello []! I'm nylonmask
스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어이므로, 스위프트의 함수는 일급객체임. 따라서 함수를 변수, 상수 등에 할당 가능하고 매개변수를 통해 전달도 가능
반환타입은 생략불가, 타입이 다른 함수는 할당 불가
//eg.1//
var someFunction: (String, String) -> Void = greeting(to:from:)
someFunction = ("eric", "nylonmask") //Hello eric! I'm nylonmask
someFunction = greeting(friend:me:)
someFunction("eric", "nylonmask") //Hello eric! I'm nylonmask
//eg.2. 타입이 다른함수 할당불가//
someFunction = sayHelloToFriends(me:friends:) // 에러 발생
주의 : 스위프트의 전반적인 문법에서 띄어쓰기를 신경써야함