함수 기본
1. 함수선언의 기본 형태
/*
func 함수이름(매개변수1이름 : 매개변수1타입, 매개변수2이름: 매개변수2타입)-> 반환 타입{
함수 구현
return 반환 값
}
*/
//example
func sum(x : Int, y: Int)-> Int{
return x + y
}
2. 반환값이 없는 함수
/*
func 함수이름(매개변수1이름 : 매개변수1타입, 매개변수2이름: 매개변수2타입)-> Void{
함수 구현
return
}
"-> Void" 생략가능
*/
func printSum(x : Int, y : Int) -> Void {
print(x + y)
return
}
func printSub(x : Int, y : Int) {
print(x - y)
return
}
3. 매개변수가 없는 함수
/*
func 함수이름()-> 반환타입{
함수 구현
return 반환 값
}
*/
func getPi()-> Double{
return 3.141592
}
4. 매개변수와 반환값이 둘다 없는 함수
/*
func 함수이름()-> Void{
함수 구현
}
"-> Void" 생략가능
*/
func sayHello(){
print("hello")
}
5. 함수 호출
//함수이름(매개변수 이름1 : 매개변수 값1, 매개변수 이름2 : 매개변수 값2 ....)
sum(x : 1, y : 2)
printSum(x : 1, y : 2)
getPi()
sayHello()
함수 고급
1. 매개변수 기본 값
- 매개변수의 디폴트 값을 지정해 둘 수 있다.
- 기본 값을 갖는 매개변수는 매개변수 목록 중 뒤쪽에 위치하는 걸 권장!
//기본값이 있는 매개변수는 뒤쪽에 배치
/*
func 함수이름(매개변수 이름: 매개변수 타입,매개변수 이름: 매개변수 타입 = 매개변수 기본값){
}
*/
func sayHi(friend : String, me: String = "Chandler"){
print("Hi, \(friend).I'm \(me)")
}
// 매개변수 기본값을 가지는 매개변수는 생략 가능
sayHi(friend: "Joey") // Hi, Joey. I'm Chandler
sayHi(friend: "Phoebe", me:"Monica") // Hi, Phoebe. I'm Monica
2. 전달인자 레이블
- 함수를 호출할 때 함수 사용자 입장에서 매개변수의 역할을 좀 더 명확하게 하기위해 사용
- 전달인자 레이블을 변경하여 동일한 이름의 함수 중복 생성 가능
// 전달인자 레이블은 함수 호출 시 매개변수의 역할을 명확히 하거나 함수 사용자의 입장에서 표현 할 때 사용
/*
func 함수이름(전달인자 레이블 매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입 ...) -> 반환타입 {
함수 구현
return
}
*/
// 함수 내부에서는 매개변수 이름을 표기해야 함
func sayHello(to friend: String, from me: String) {
print("Hello \(friend), I'm \(me)")
}
// 함수를 호출할 때에는 전달인자 레이블을 사용
sayHello(to: "Monica", from: "Chandler") // Hello Monica, I'm Chandler
3. 가변 매개변수
- 전달 받을 값의 개수를 알기 어려울 때 사용
- 가변 매개변수는 함수당 하나만 가질 수 있음
- 가변 매개변수 역시 매개변수 목록 중 뒤에 위치하는 것을 권장!
// 전달 받을 값의 개수를 알기 어려울 때 사용, 가변 매개변수는 함수당 하나만
//"..."사용
/*
func 함수이름(매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입...) -> 반환타입 {
함수 구현부
return
}
*/
func helloToFriends(me: String, friends: String...) -> String {
return "Hello \(friends), I'm \(me)"
}
print(helloToFriends(me: "Chandler", friends: "Joey", "Ross"))// Hello ["Joey", "Ross"], I'm Chandler.
// 가변 매개변수에 아무것도 안 넘길 경우
//print(helloToFriends(me: "Chandler", friends: )) !오류 발생!
//print(helloToFriends(me: "Chandler", friends: nil)) !오류 발생!
print(helloToFriends(me: "Chandler")) // Hello [], I'm Chandler.
☞ 당연히 1, 2, 3 혼용해서 사용 가능
//Ex)
func sayHelloToFriends(me : String = "Chandler", friends: String...) -> String{
return "Hello \(friends), I'm \(me)"
}
print(sayHelloToFriends(friends: "Joey", "Ross", "Monica"))
4. 데이터 타입으로써 함수
- 스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어이므로 스위프트에서 함수는 일급객체
⇒ 함수를 변수, 상수등에 할당이 가능하며 매개변수를 통해 전달할 수 도 있다. - 함수의 타입 표현 : 반환 타입 생략 불가
// 반환타입 생략 불가
// (매개변수1타입, 매개변수2타입 ...) -> 반환타입
var aFunc: (String, String) -> Void = sayHello(to:from:)
aFunc("Joey","Chandler") // Hello Joey! I'm Chandler
aFunc = sayHi(friend:me:)
aFunc("Everyone","Chandler")// Hi, Everyone. I'm Chandler
//aFunc = sayHelloToFriends !오류! 당연히 타입이 다른 함수는 할당 불가
//함수를 매개변수로
func friends(bFunc: (String,String) -> Void){
bFunc("Rachel","Monica")
}
friends(bFunc: sayHello(to:from:)) //Hello Rachel! I'm Monica
friends(bFunc: aFunc) //Hi,Rachel,I'm Monica
'IOS > swift 기초 문법' 카테고리의 다른 글
[Swift 기초 문법] 1.4 (Array, Dictionary, Set) (0) | 2022.07.04 |
---|---|
[Swift 기초 문법] 1.3 Any, AnyObject, nil (0) | 2022.07.03 |
[Swift 기초 문법] 1.2 상수와 변수, 기본 데이터 타입 (0) | 2022.07.03 |
[Swift 기초 문법] 1.1 명명법, 콘솔로그, 문자열 보간법 (0) | 2022.06.30 |
[Swift 기초 문법] 0. What's Swift (0) | 2022.06.30 |