DEV - iOS/iOS

[Swift] 스위프트 기본 문법 공부(5) - 함수 & 클로저

베이비코더 2022. 2. 14. 19:33
반응형

Function 함수

func plus(num1:Int, num2:Int) -> Int {
    return num1 + num2
}

// 튜플 형태의 리턴값
func plus2(num1:Int, num2:Int) -> (String, Int) {
    return ("두 수를 더하면", num1 + num2)
}

let a = 10
let b = 20

var result = plus2(num1: a, num2: b)

두 수를 파라미터로 받아 더해서 반환하는 함수를 작성했다.

func 키워드와 함수명을 적고 괄호 안에 파라미터 이름타입, -> 뒤에는 리턴 타입을 적어준다.

// 함수 호출
var sum = plus(num1: 10, num2: 30)

 

sum 변수에는 10과 30을 더한 40이 담기게 된다.

// 파라미터명 생략
func plus(_ num1:Int, _ num2:Int) -> Int {
    return num1 + num2
}

var sum = plus(10,20)

함수를 선언할 때 파라미터명 앞에 _ 언더바를 붙여주면,

함수를 호출할 때 파라미터명 표기 없이 값만 적어 사용할 수 있다.

 

Closure 클로저

let score = { (a:Int) -> String in
    return "\(a)점"
}

파라미터를 받고 반환하는 것이 함수와 매우 유사하지만,

함수와 유사하지만 클로저는 이름이 없고, 다양한 축약 방식을 써서 코드를 간결하게 작성할 수 있다.

// return 키워드 생략
let score2 = { (a:Int) -> String in
    "\(a)점"
}

// 리턴 부분의 내용으로 타입 추론이 가능하기 때문에 리턴 타입을 명시하지 않아도 됨. (-> String 생략)
let score3 = { (a:Int) in
    "\(a)점"
}

// in 생략하고 파라미터 바로 사용
// in을 생략하면 반드시 $0, $1, ... 표기해주어야 함.
// in을 생략하지 않으면 달러 표기는 사용할 수 없음 !
let score4 : (Int) -> String = {
    "\($0)점"
}
score4(100)

let score4_2 : (Int, Int, Int) -> String = {
    "\($0 + $1 + $2)점"
}
score4_2(10, 20, 30)

 

반응형