*스위프트에서 함수는 override(재정의), overload(중복정의) 가능
=> 매개변수 타입, 매개변수의 개수가 다르면 같은 이름의 함수 만들 수 있음
func hello(name: String) -> String {
return "Hello \(name)!"
}
let helloJenny = hello(name: "Jenny")
print(helloJenny) //Hello Jenny!
=> *return은 함수 정의 시 생략 가능
parameter: 함수 정의 시 외부에서 받아들이는 전달 값 이름
e.g. name
argument: 함수 호출 시 전달하는 값
e.g. "Jenny"
parameter가 필요없으면 공란, 여러개 호출 시 콤마(,)로 구분
여러 parameter가 있는 함수 호출 시 (parameter name : argument)형태
*parameter name: 호출 시 parameter에 붙이는 이름
보통 함수 정의 시 parameter를 정의하면 parameter name(= external parameter)과 argument label을 같은 이름으로 사용 가능. but argument label 별도 지정 시 함수 외부에서 parameter의 역활 좀 더 명확히 할 수 있음.
func sayHello(from myName: String, to name: String) -> String {
return "Hello \(name)! I'm \(myName)"
}
print(sayHello(from: "Shrimp", to: "Jenny")) //Hello Jenny! I'm Shrimp
⭐️ from과 to는 external parameter name이고 myName과 name은 internal parameter name 이다.
그래서 name, myName은 return 다음에 들어가고, from과 to는 함수를 호출 할 때 사용된다.
- arguement label = external parameter name
- parameter name = internal parameter name
- argument label의 생략
func sayHello(_ myName: String, _ name: String) -> String { return "Hello \(name)! I'm \(myName)" } print(sayHello("Shrimp","Jenny")) //Hello Jenny! I'm Shrimp
함수 정의 시 argument label(external parameter name)을 ''로 대체하고 함수 호출 시 argument label을 지우고 사용 할 값만 넣어주면 된다.
또는 함수 정의 시 parameter name 앞에 ''를 붙이고 함수 호출 시 '()'안을 비울 수 있다.
*argument label 사용 시 함수 호출 할 때 parameter name 사용 불가
*함수이름이 같더라도 argument label이 다르면 overload(중복 정의)로 동작 가능.
func getMilk(money: Int) -> Int {
let change = money - 2
return change
}
-> : return arrow
Int : return type
return: return keyword
change: return value
var change = getmilk(4)
getmilk(4): output이고, 이건 위에 정의된 함수에 의해 2(Int)이다.
// vanilla
func greeting1() {
print("Hello")
}
print(greeting1) // Hello
//strawberry
func greeting2(name: String) {
print("Hello \(name)")
}
print(name: "alex") // Hello alex
//chocolate
func greeting3(name: String) -> Bool {
if name == "alex" || name == "amy"{
return true
}else {
return false
}
}
var doorShouldOpen = greeting3(name: alex)
print(doorShouldOpen) // true