- 아래 형식처럼 작성하면 된다.
- 반환값이 없다면 void를 반환하거나 생략이 가능하다.
- 매개변수가 없으면 그냥 ()로 비워두면 된다.
func 함수이름(매개변수1 이름: 매개변수1 타입 ...) -> 반환타입 {
/*함수 구현부*/
return 반환값
}
func sum(a: Int, b: Int) -> Int {
return a+b
}
//2) 반환값이 없을때
func sayHello(hello: String) -> Void {
print(hello)
}
func sayHello(hello: String){
print(hello)
}
//3) 매개변수가 없을때
func sayHello() { print("say Hello")
- Swift에서는 함수 매개변수에 기본값을 미리 설정할 수 있다.
- 이때 기본값을 넣는 매개변수는 맨 뒤로 빼주면 된다.
- 기본값을 설정해둔 매개변수에 값을 새로 넣으면, 새로 넣은 값으로 호출이 되지만 값을 따로 넣지 않으면 기본값으로 호출이 된다!
- 매개변수 기본값을 가지는 매개변수는 호출 시 생략 가능하다!
func greeting(friend: String, me: String = "hidi") {
print("Hello \(friend)! I'm \(me)")
}
greeting(friend: "hana") // Hello hana! I'm hidi
(friend: "john", me: "eric") // Hello john! I'm eric
- 함수 내부에서 쓰는 이름과, 호출할 때 쓰는 이름을 분리할 때 사용한다.
- Swift에서는 언어 자체의 표현력을 중요시 하는 언어라, 사용자 입장에서 더 알아보기 쉽도록 "전달인자 레이블" 기능을 제공
- 조금 더 가독성이 좋게 하기 위해 전달인자 레이블을 사용하는 것도 좋은 방법이다!
// 함수 내부에서 전달인자를 사용할 때에는 매개변수 이름을 사용한다.
func greeting(to friend: String, from me: String) {
print("Hello \(friend)! I'm \(me)")
}
// 함수를 호출할 때에는 전달인자 레이블을 사용해야 한다.
greeting(to: "hana", from: "pig") // Hello hana! I'm pig
- 함수 파라미터 개수를 정적으로 정하지 않고 가변적으로 넘길 수 있게 해주는 swift의 문법
- 가변 매개 변수는 함수 내부에서 array 형태로 쓰이게 된다.
- 가변 매개 변수로 사용하고자 하는 매개변수 타입의 뒤에 '...'를 붙여서 사용한다.
- 함수에서 1개만 사용가능하며, 0개가 올 수도 있고, 여러개가 올 수도 있다.
// array처럼 사용
func printNumbers(_ numbers: Int...) {
for number in numbers {
print(number)
}
}
printNumbers(0, 1, 2, 3, 4, 5)
/*결과
0
1
2
3
4
5
*/
func sayHelloToFriends(me: String, friends: String...) -> String {
return "Hello \(friends)! I'm \(me)!"
}
print(sayHelloToFriends(me: "apple", friends: "hana", "eric", "wing")) // Hello ["hana", "eric", "wing"]! I'm apple!
print(sayHelloToFriends(me: "apple")) //Hello []! I'm apple!
공식문서를 살펴보면 Swift에서 함수는 일급 객체이기 대문에, 함수를 변수, 상수, 매개변수에 넣을 수 있다고 합니다!! 그럼 일급 객체는 무엇일까요???
일급 객체는 위의 조건들을 만족하면 일급 객체라 부를 수 있습니다.
대표적인 예시로 변수가 있습니다. 변수는 매개변수, 반환값, 값 대입 모두가 가능하자나요!!
그리고 함수도 일급객체입니다!!
func greeting(to friend: String, from me: String) {
print("Hello \(friend)! I'm \(me)"
}
// 새로운 함수에 기존 함수를 대입해서
var someFunction: (String, String) -> Void = greeting(to:from:)
// 바로 함수 형태로 사용하고 있는 것을 볼 수 있다!
someFunction("eric", "apple")
let f:(Data) -> Void { }
// 함수를 매개변수로 사용한 예시
func doSometing(withData data: Data.action: (Data) -> Void) {
action(data)
}
doSomething(data, action)
// 함수의 반환값으로 함수를 사용할 수 있다.
func getClosure() -> (Data) -> Void {
return f
}