본문 바로가기
Swift

클로저 (Closures)

by JDeoks 2023. 10. 17.

1. 클로저

일급 객체로서, 함수처럼 기능을 수행하는 블록.

named closure(func 키워드를 사용하는 일반적인 함수), unnamed closure(익명함수) 두 가지 종류가 있음

 

다음과 같은 구조를 가진다.

{ (파라미터) -> 반환타입 in
    // 실행 코드
}

let multiply: (Int, Int) -> Int = { (a, b) in
    return a * b
}

2. 클로저의 축약

https://babbab2.tistory.com/82

 

Swift) 클로저(Closure) 정복하기(2/3) - 문법 경량화 / @escaping / @autoclosure

안녕하세요 :) 소들입니다 이번 포스팅인 저번 포스팅에 이어 클로저에 대해 다뤄보려고 해요!!! 저번 포스팅이 클로저의 표현식과 특징?에 대해 알아봤었어요!!! 근데 생각보다 클로저의 구문은

babbab2.tistory.com

워낙 잘 쓴 글이 있어서 종류만 정리하겠음

 

1. 트레일링 클로저

마지막 파라미터의 클로저는 함수 뒤에 붙여 쓸 수 있음

func doSomething(closure: (Int, Int, Int) -> Int) {
    closure(1, 2, 3)
}
// 기본
doSomething(closure: { (a: Int, b: Int, c: Int) -> Int in
    return a + b + c
})
// 트레일링 클로저
doSomething () { (a: Int, b: Int, c: Int) -> Int in
    return a + b + c
}
함수가 클로저 하나만을 파라미터로 받을 경우, () 생략도 가능

1. 파라미터 타입, 리턴 타입 생략 가능

doSomething에서 클로저의 타입을 명시 했기 때문에 클로저 사용할 때 타입을 생략 할 수 있음

func doSomething(closure: (Int, Int, Int) -> Int) {
    closure(1, 2, 3)
}
// 기본
doSomething(closure: { (a: Int, b: Int, c: Int) -> Int in
    return a + b + c
})
// 파라미터, 리턴타입 생략
doSomething(closure: { (a, b, c) in
    return a + b + c
})

1. Shortand Argument Names

파라미터 이름 대신 $0, $1, $2... 사용 가능

파라미터 이름과 함께 in 도 생략

doSomething(closure: {  
    return $0 + $1 + $2
})

3. 단일 리턴문만 남을 경우, return 생략 가능

doSomething(closure: {  
     $0 + $1 + $2
})

4. 클로저 파라미터가 마지막 파라미터일 때, 트레일링 클로저 사용

doSomething {  
     $0 + $1 + $2
}

'Swift' 카테고리의 다른 글

@escaping  (0) 2023.10.19
클로저 - 캡쳐  (0) 2023.10.17
일급 객체 (First-Class Object)  (0) 2023.10.16
스크롤 뷰 쉽게 만들기  (0) 2023.10.05
제네릭(Generics)  (1) 2023.10.04