기본 함수
func 함수이름(매개변수1이름: 매가변수1타입, 매개변수2이름: 매개변수2타입...) -> 반환타입{
/* 함수 구현부 */
return 반환값
}
ex)
fun sum(a: Int, b: Int) -> Int {
return a + b
}
함수의 반환값이 없다면, Void 형태로 반환하거나 생략이 가능함 !
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 ...) -> Void{
/* 함수 구현부 */
}
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 ...){
/* 함수 구현부 */
}
함수 호출
func sum(a: Int, b: Int) -> Int{
return a + b
}
sum(a: 3, b: 5) // 8
Swift에서는 함수 매개변수에 기본값을 미리 설정해둘 수 있음 !
// 기본값을 넣는 매개변수는 맨 뒤에 위치 !
func test(firstName: String, lastName: String = "jooyong"){
print("first name : \(fristName), last name : \(lastName)")
}
test(firstName: "shin") // first name : shin, last name : jooyong)
test(firstName: "park", lastName: "bong") // first name : park, last name : bong
Swift에서는 언어 자체의 표현력을 중요시 하여,
사용자 입장에서 좀 더 알아보기 쉽도록 전달인자 레이블 기능을 제공함 !
** 전달인자 레이블은 함수 내부에서 쓰는 이름과 호출할 때 쓰는 이름을 분리할 때 사용됨
// 함수 내부에서 전달인자를 사용할 때에는 매개변수 이름을 사용함.
func test(to firstName: String, from lastName: String){
print("first name : \(fristName), last name : \(lastName)")
}
// 함수를 호출때에는 전달인자 레이블을 사용해야함.
test(to: "shin", from: "jooyong")
Swift에서는 전달 받을 값의 갯수를 알기 어려운 상황을 위하여,
가변 매개변수 기능을 제공함.
가변 매개변수는 함수에서 1개만 사용할 수 있음.
가변 매개변수 부분에 데이터가 0개가 들어올 수 있고, 여러개가 들어올 수 있움.
func test(firstName: String, lastName: String...) -> String{
return "first name : \(fristName), last name : \(lastName)"
}
print(test(firstName: "shin", lastName: "joo","yong","jooyong"))
// firstName : "shin", last name : ["joo","yong","jooyong"]
print(test(lastName: "jooyong:))
// firstName : [], lastName : jooyong
Swift에서 함수는 일급 객체(first-class objet)이기 때문에 함수를 변수, 상수, 매개변수에 넣을 수 있음.
일급 객체(first-class object)
- 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있음
- 모든 일급 객체는 함수의 반환값이 될 수 있음
- 모든 일급 객체는 할당의 대상이 될 수 있음
- 모든 일급 객체는 비교 연산 (==, equal)을 적용할 수 있음
**평소에 자주 쓰고 있던 변수도 모두 일급 객체임 !
ex1)
var count = 3
var newCount = 3
count = newCount
sum(count, newCount)
ex2) 함수도 할당 가능
func test(to firstName: String, from lastName: String){
print("firstName: \(firstName), lastName: \(lastName)")
}
var someFuction: (String, String) -> Void = test(to:from:)
someFuction("shin", "jooyong") // firstName: shin, lastName: jooyong
// 새로운 함수에 기존 함수를 대입하여 바로 함수 형태로 사용될 수 있음 !
할당뿐만 아니라, 실질적인 매개변수가 될 수 있움.
또는 함수의 반환값으로 함수를 사용할 수 있움.
let f:(Data) -> Void = { }
func doSomething(withData data: Data, action: (Data) -> Void) {
action(data)
}
doSomething(data, action)
func getClosue() -> (Data) -> Void {
return f
}