2021년 11월 15일에 공부한 내용입니다.
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타엡 = 매개변수 기본값...) -> 반환타입 {
return 반환값
}
func greeting(friend: String, me: String = "240") {
print("Hello \(friend)! I'm \(me)")
}
// me는 매개변수 기본 값을 갖고 있기 때문에 따로 전달을 해주지 않아도 greeting 함수가 동작한다.
greeting(friend: "beomgyu") // Hello beomgyu! I'm 240
greeting(freind: "hueningkai", me: "seoyoung") // Hello hueningkai! I'm seoyoung
// 아래 함수는 위 greeting 함수와 똑같은 타입과 매개변수를 갖는 함수이지만 to, from이라는 전달인자 레이블을 사용해서 함수 이름 자체가 바뀐 효과를 갖는다.
// 실제로 Swift 내에서는 greeting, to, from 모두 함수의 이름으로 취급을 한다.
// 함수 내부에서 전달인자를 사용할 때는 "매개변수 이름"을 사용한다.
func greeting(to friend: String, from me: String) {
print("Hello \(friend)! I'm \(me)!")
}
// 외부에서 함수 호출할 때는 "전달인자 레이블"을 사용한다.
greeting(to: "beomgyu", from: "240")
func 함수이름(매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입...) -> 반환타입 {
함수 구현부
return 반환값
}
// 친구가 몇 명이 오든 상관이 없다.
func sayHelloToFriends(me: String, friends: String...) -> String {
return "Hello \(friends)! I'm \(me)!"
}
// 전달인자가 아예 없거나 nil을 넣으면 오류가 발생한다.
print(sayHelloToFriends(me: "240", friends: nil))
// 아무 값도 전달하고 싶지 않으면 전달인자 레이블을 생략하면 된다.
print(sayHelloToFriends(me: "240")) // Hello []! I'm 240!
print(sayHelloToFriends(me: "240", friends: "beomgyu", "hueningkai", "yeonjun")) // Hello ["beomgyu", "huneingkai", "yeonjun"]! I'm 240!
* 반환값이 없는 함수, 매개변수 기본 값, 전달인자 레이블, 가변 매개변수 등은 모두 섞어서 사용 가능하다.
일급객체
이다. 그래서 함수를 변수, 상수 등에 할당이 가능하고 매개변수를 통해 전달할 수도 있다.(매개변수1타입, 매개변수2타입 ...) -> 반환타입
// String 타입의 매개변수 두 개가 오고 반환값이 없는 함수가 someFunction이라는 변수 안에 들어올 수 있음을 의미
// greeting() 함수를 할당함
var someFunction: (String, String) -> Void = greeting(to:from:)
someFunction("240", "beomgyu") // Hello beomgyu! I'm 240
someFunction = greeting(friend:me:)
someFunction("240", "beomgyu") // Hello beomgyu! I'm 240
// 타입이 다른 함수는 할당할 수 없다.
// sayHelloToFriends()는 가변 매개 변수를 갖기 때문에 타입이 다르다.
someFunction = sayHelloToFriends(me: friends:) // error
// 함수 타입을 매개변수 타입으로 지정해주면 function이라는 매개변수를 안에서도 실행할 수 있다.
func runAnother(function: (String, String) -> Void) {
function("jenny", "mike")
}
runAnother(function: someFunction)