매개 변수 기본 값
- 기본 값을 갖는 매개 변수는 매개 변수 목록 중에 뒤쪽에 위치하는 것이 좋음
func 함수 이름(매개 변수 1 이름: 매개 변수 1 타입, 매개 변수 2 이름: 매개 변수 2 타입 = 매개 변수 기본 값) -> 반환 타입 {
함수 구현부
return 반환 값
}
func greeting(friend: String, me: String = "khon") {
print("Hello \ (friend)! I'm \ (me)" )
}
* 매개 변수 기본 값을 가지는 매개 변수는 생략할 수 있음
greeting(friend: "khon01") // Hello khon01! I'm khon
greeting(friend: "khon02", me: "khon03") // Hello khon02! I'm khon03
전달 인자 레이블
- 함수를 호출할 때 매개 변수의 역할을 좀 더 명확하게 하거나 함수 사용자의 입장에서 표현하고자 할 때 사용
- 함수 내부에서 전달 인자를 사용할 때에는 매개 변수 이름을 사용
func 함수 이름(전달 인자 레이블 매개 변수 1 이름: 매개 변수 1 타입, 전달 인자 레이블 매개 변수 2 이름: 매개 변수 2 타입) -> 반환 타입 {
함수 구현부
return
}
func greeting(to friend: String, from me: String) {
// to와 from이라는 전달 인자 레이블을 사용해서 함수의 이름 자체가 바뀐 효과를 봤기 때문에 중복 정의로서의 역할을 수행할 수 있음
* greeting이라고 같은 이름을 가지고 있는 것으로 보이긴 하지만 실제로 Swift에서는 함수의 이름이 greeting, to, from까지 전부 함수의 이름으로 취급되기 때문에 위의 함수와 다른 취급이 됨
print("Hello \ (friend)! I'm \ (me)")
함수 내부에서 전달 인자를 사용할 때에는 매개 변수 이름을 사용
func greeting(to friend: String, from me: String) {
print("Hello \ (friend)! I'm \ (me)")
}
함수를 호출할 때에는 전달 인자 레이블을 사용해야 함
greeting(to: "khon1", from: "khon2") // Hello khon1! I'm khon2
가변 매개변수
- 전달받을 값의 개수를 알기 어려울 때 사용할 수 있음
- 가변 매개 변수는 함수당 하나만 가질 수 있음
func 함수 이름(매개 변수 1 이름: 매개 변수 1 타입, 전달 인자 레이블 매개변수 2 이름: 매개 변수 2 타입...) -> 반환 타입 {
함수 구현부
return
}
func sayHelloToFriends(me: String, friends: String...) -> String {
return "Hello \ (friends)! I'm \ (me)!"
}
print(sayHelloToFriends(me: "khon"m friends: "khon01", "khon02", "khon03"))
// Hello ["khon01", "khon02", "khon03"]! I'm khon2
print(sayHelloToFriends(me: "khon")) // 가변 인자에 아무 값도 넘기고 싶지 않다면 전달 인자 레이블을 생략하면 됨
// Hello []! I'm khon!
데이터 타입으로서의 함수
- Swift는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어
- Swift의 함수는 일급 객체이므로 변수, 상수 등에 저장이 가능하고 매개 변수를 통해 전달할 수도 있음
함수의 타입 표현
- 반환 타입을 생략할 수 없음
- 타입이 다른 함수는 할당할 수 없음
(매개 변수 1 타입, 매개 변수 2 타입) -> 반환 타입
var someFunction: (String, String) -> Void = greeting(to:from:)
someFuction("khon", "khon01")
// someFunction이라는 변수 생성, 이 변수에 함수가 들어올 거라는 뜻, 매개 변수가 두 개인데 두 개 다 String 타입의 매개 변수를 가지고 반환 값이 없는 함수가 들어올 수 있다고 명시, greeting이라는 함수를 someFunction 변수에 할당
someFunction = greeting(friend:me:)
someFunction("khon", "khon01")
someFunction = sayHelloToFriends(me: friends: )
// friends가 가변 매개 변수를 가짐, String 타입이긴 하지만 가변 매개 변수를 가지기 때문에 타입이 다름 이런 함수는 할당을 할 수 없음
func runAnother(function: (String, String) -> Void) {
function("khon", "khon5")
}
// 함수 타입을 매개 변수 타입으로 지정해주면 function이라는 매개 변수를 안에서도 실행할 수 있음
runAnother(function: greeting(friend:me:))
runAnother(function: someFunction)