이번 글은 함수에 대해서 다뤄볼 예정이다. 함수는 작업의 가장 작은 단위이자 하나의 작은 프로그램으로, 기본적으로 메서드와 같다고 생각하면 된다.
//기본값을 갖는 매개변수는 매개변수 목록 중 뒤쪽에 위치하는 것이 좋음
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 = 매개변수 기본값 ...) -> 반환타입 {
함수 구현부
return 반환값
}
func greeting(friend: String, me: String = "yagom") {
print("Hello \(friend)! I'm \(me)")
}
//기본값을 가지는 매개변수는 생략 가능함 !
greeting(friend: "hana") //Hello hana! I'm yagom
greeting(friend: "john", me: "eric") //Hello john! I'm eric
전달인자 레이블
//전달인자 레이블
func 함수이름(전달인자 레이블 매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입 ...) -> 반환타입 {
함수 구현부
return
}
//함수 내부에서 전달인자를 사용할 때에는 매개변수 이름을 사용
func greeting(to friend: String. from me: String) {
print("Hello \(friend)! I'm \(me)")
}
//함수 호출 시 전달인자 레이블을 사용
greeting(to: "hana", from: "yagom") //Hello hana! I'm yagom
//중요! greeting이라는 함수를 위에서도 선언하였지만, 전달인자 레이블을 통해 함수의 이름 자체가 바뀐 효과를 얻을 수 있음!
//스위프트에서는 greeting &&to &&from까지 함수의 이름으로 취급되어 위의 함수와 다른 함수로 취급됨
//매개변수 이름조차 쓰기 싫을 때는 _를 사용하면 된다
func myFunctionThird(_ name: String) -> String {
return "안녕하세요? \(name)입니다!"
}
myFunctionThird("Ted") //매개변수 이름 선언 없이도 잘 동작한다.
가변 매개변수
//가변 매개변수
func 함수이름(매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입...) -> 반환타입 {
함수 구현부
return
}
func sayHelloToFriends(me: String, friends: String...) -> String { //friends의 값이 몇 개인지 모를 때 사용
return "Hello \(friends)! I'm \(me)!"
}
print(sayHelloToFriends(me: "yagom", friends: "hana", "eric", "wing")) //Hello ["hana", "eric", "wing"]! I'm yagom!
print(sayHelloToFriends(me: "yagom") //Hello []! I'm yagom!
함수의 타입표현
//함수 내부에서 전달인자를 사용할 때에는 매개변수 이름을 사용
func greeting(to friend: String. from me: String) {
print("Hello \(friend)! I'm \(me)")
}
//함수 호출 시 전달인자 레이블을 사용
greeting(to: "hana", from: "yagom") //Hello hana! I'm yagom
(매개변수1타입, 매개변수2타입 ...) -> 반환타입
var someFunction: (String, String) -> Void = greeting(to:from:) //반환값이 없는 String 타입의 매개변수 2개가 greeting이라는 함수에 들어가서 새로운 함수 someFunction을 만듦
someFunction("eric", "yagom") //Hello eric! I'm yagom!
someFunction = greeting(friend:me:) //위에 있는 greeting과는 다른 함수!!
someFunction("eric", "yagom") //Hello eric! I'm yagom
//함수 타입을 매개변수 타입으로 지정을 해주고 실행 가능 !
func runAnother(function: (String, String) -> Void) {
function("jenny", "mike")
} //String type 2개를 매개변수로 가지는 함수가 function의 매개변수 타입
runAnother(function: greeting(friend:me:)) //Hello jenny! I'm mike
runAnother(function: someFunction) //Hello jenny! I'm mike
[출처] 스위프트 프로그래밍 (야곰), 야곰의 스위프트 기초문법 강좌, 개발하는 정대리 스위프트 강좌