티스토리 뷰
안녕하세요 Hani입니다.
이번에는 클로저를 알아보겠습니다.
클로저를 공부하려고 마음먹은 계기는 ..!
Action Sheet를 사용하려고 했는데 Action을 누르면 어떤 행동을 할 것인지 정하는 handler가 있었기 때문이에요.
사실 비슷한 인자를 Present에서도 본 적이 있습니다.
다만 화면 전환만을 목적으로 할 때는 이 인자에 굳이 뭘 넣을 필요가 없었기 때문에 그냥 넘어갔었어요🥺
하지만 Action Sheet는 눌렀을 때의 동작을 직접 넣어줘야 하기 때문에 지나칠 수 없었답니다.
하여튼 클로저라는 게 스위프트에서 처음 접한 생소한 단어라서..
일단 빌드업으로 함수에 대하여 얘기해보겠습니다.
//function
func summation(_ L: Int, _ R:Int) -> Int {
return L + R
}
일반적인 함수죠? func 키워드로 자신을 함수라고 알려주고 있고...
summation이라는 자신만의 이름을 갖고 있고,
매개변수와 반환할 타입 그리고 함수가 실행됐을 때 어떤 행동을 할지 적혀있습니다.
//closure
{ (parameters) -> return type in
statements
}
그리구 클로저는 뼈대는 이렇게 생겼습니다.
생각해보면 우리가 알고 있던 함수는 func 키워드와 자신만의 이름을 갖고 있는 클로저의 특수한 형태라고 할 수 있어요.
실제로 어떻게 쓰는지 한 번 알아보겠습니다. 😎
오름차순으로 정수를 정렬해주는 sorted 고차함수에요. (괄호 안에 있는거 디폴트로 오름차순이지만...)
클로저는 여러가지 축약형이 존재하는데 가독성을 해치지 않는 선에서 줄여 사용하면 코드가 깔끔해집니다.
다시 Action Sheet로 돌아가서 코드를 확인해보면
actionSheet.addAction(UIAlertAction(title: "", style: .default, handler: { action in
//push or present
}))
actionSheet.addAction(UIAlertAction(title: "", style: .default) {
//push or present
})
Trailing Closures로 표현했을 때 더 간단해집니다.
References
https://docs.swift.org/swift-book/LanguageGuide/Closures.html
https://github.com/yeojaeng/Study_Log/blob/master/iOS/Contents/Closure.md
'Swift' 카테고리의 다른 글
[Swift] ARC (Automatic Reference Counting) 정리 (0) | 2021.05.17 |
---|---|
[Swift] 일급 객체 First class Citizen (0) | 2021.05.15 |
[Swift] Init vs Convenience Init (0) | 2021.05.01 |
[Swift] Deque, OrderedSet, OrderedDictionary (0) | 2021.04.07 |
[스위프트] guard let / if let (0) | 2021.03.21 |
- Total
- Today
- Yesterday
- 벨만포드 알고리즘
- HIG
- observeOn
- 최단경로 문제
- test coverage
- IOS
- 최단경로문제
- 벨만포드 시간복잡도
- 포드 풀커슨 알고리즘
- MeTal
- 네트워크 플로우
- 강한 순환 참조
- 다익스트라 시간복잡도
- rxswift
- 에드몬드 카프 알고리즘
- State Restoration
- WWDC21
- 네트워크 유량
- CompositionalLayout
- WWDC19
- Testable
- CPU와 Memory
- WWDC16
- WWDC17
- mach-o
- 코딩대회
- 최단경로 알고리즘
- 부스트캠프 6기
- 최대 매칭
- 컴퓨터 추상화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |