JS 화살표 함수랑 살짝 짬뽕되어 있는 느낌이라 쉬웠다.
// 함수 선언시
func 함수명(매개변수명: 데이터타입) -> 반환값타입 {
구문
}
// 함수 호출 시
함수명(매개변수명: 데이터)
// exam
func greet(name: String) -> String{
let greeting = "Hello, \(name)"
return greeting
}
greet(name: "Kyusang")
func sum(num1: Int, num2: Int) -> Int {
return num1 + num2
}
sum(num1: 5, num2: 3)
func sum(num1: Int = 5, num2: Int) -> Int {
return num1 + num2
}
// Xcode에서 자동완성할 경우 초기값이 있을 경우 num1은 아예 제외하고 num2만 자동완성된다.
sum(num2: 3)
// 아래와같이 입력해도 당연히 동작
sum(num1: 7, num2: 3)
// 매개변수의 데이터형 뒤에 ... 을 붙인다.
// 가변 매개변수를 사용할 경우 매개변수에 입력된 값들이 사용될때 배열로 사용됨
func sumOf(numbers: Int...) -> Int{
var total = 0
for number in numbers {
total += number
}
return total
}
sumOf(numbers: 1,2,3,4,5)
func sumAndMultiply(num1: Int, num2: Int) -> (sum: Int, multiply: Int) {
var sum = num1 + num2
var multiply = num1 * num2
return (sum, multiply)
}
sumAndMultiply(num1: 4, num2: 5).self
=> (sum: 9, multiply: 20)
sumAndMultiply(num1: 4, num2: 5).sum
=> 9
sumAndMultiply(num1: 4, num2: 5).multiply
=> 20
주변 컨텍스트에서 값을 캡쳐할 수 있고 JS 순수함수랑 닮았다(생긴게)
// 클로저의 기본형
{ (매개변수) -> 반환타입 in 구문 }
// exam
let closure = {
(name: String) -> String in return "Hello, \(name)"
}
// 이때 return 생략 가능