함수와 클로저
함수
- 함수는 func 키워드를 사용하여 정의하고 -> 를 사용하여 함수의 반환 타입을 정한다.
func hello(name : String, time : Int) -> String {
var string = ""
for _ in 0..<time {
string += "\(name)님 안녕하세요\n"
}
return string
}
- 스위프트에서는 특이하게 함수를 호출할때 파라미터 명도 명시해주어야 한다.
hello(name : "Crinex", time : 3)
- 만약, 함수를 호출할 때 사용하는 파라미터명과 함수 내부의 파라미터명을 다르게 사용하고 싶다면 이렇게 할 수도 있다.
func hello(to name : String, numberOfTimes time : Int) {
for _ in 0..<time {
print(name)
}
}
hello(to : "Crinex", numberOfTimes : 3)
- 파라미터명을 사용하고 싶지 않다면 _ 로 파라미터명을 정의하면된다.
func hello(_ : String, time : Int) {
code...
}
hello("Crinex", time : 3)
- 파라미터의 기본값을 설정해 줄 수 도있다. 기본값이 지정되면 함수 호출시에 파라미터를 사용하지 않아도 기본값으로 실행된다.
func hello(name : String, time : Int = 1) {
code...
}
hello("Crinex")
- ... 을 사용하면 개수가 정해지지 않은 파라미터를 받을 수 있다.
func sum(_ numbers : Int) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sum(1, 2)
sum(3, 4, 5)
func hello(name : String, time : Int) {
func message(name : String) -> String {
return "\(name)님 안녕하세요"
}
for _ in 0..<time {
print(message(name : name))
}
}
func helloGenerator(message : String) -> (String) -> String {
func hello(name : String) -> String {
return name + message
}
return hello
}
let hello = helloGenerator(message : "님 안녕하세요")
hello("Crinex")