클로저 Closure
이름이 없는 익명 함수
함수는 "1급 객체"로 취급 - 프로토콜도 마찬가지
- 변수에 할당가능, 함수호출 시 파라미터로 전달 가능, 함수에서 함수를 반환 가능
// 기존 함수의 형태
func add(a: Int, b: Int) -> Int {
let result = a + b
return result
}
// 클로저 형태 (이름을 없애고 필요없는 것들을 생략함)
{ (a, b) in
let result = a + b
return result
}
콜백함수 Callback Funtion
다른 함수의 인수(argument) 로 사용되는 함수
어떤 이벤트 후 호출되어지는 함수
다른 함수의 인풋으로 쓰여서 나중에 출력이 된다.
func doSomething(callback: () -> ()) {
print("시작")
print("중간")
callback()
}
func printFinish() {
print("끝")
}
doSomething(callback: printFinish)
-> 시작 중간 끝
// 클로저 사용 / 함수를 정의하면서 전달함, 이름이 필요없음, 자유로움
doSomething(callback: { () -> () in
print("끝")
})
// 생략
doSomething(callback: { print("끝") })
클로저의 축약 과정
closure(param: { (str: String) in
return str.count
})
--> closure { $0.count }
closure(param: { (str: String) in
return str.count
})
// ↓ 파라미터의 타입 생략 ( 유추가능 )
closure(param: { str in
return str.count
})
// ↓ 리턴 생략
closure(param: { str in
str.count
})
// ↓ 파라미터 겹쳐서 축약
closure(param: {
$0.count
})
// ↓ 후행 클로저 trailing closure
closure() {
$0.count
}
// ↓ () 생략
closure { $0.count }
클로저의 캡처현상
클로저가 힙에 생길 때 필요한 외부변수의 주소를 계속 사용하기 위해 캡처
외부 변수를 지속적으로 사용하려고
더 공부 필요
단순 클로저 실행 = non-escaping
⭐️ @escaping
탈출을 한다
왜 필요할까?
함수를 더 오래 사용하려고
함수가 종료되어도 클로저가 존재하도록 함
( 어떤 함수의 내부에 존재하는 클로저를 외부 변수에 저장 )
@autocolsure
자동으로 클로저를 만들어줌
( 파라미터가 없는 클로저만 가능 )
잘 사용하지 않음, 가끔 UIKit에 있음
https://bbiguduk.gitbook.io/swift/language-guide-1/closures#escaping-closures
클로저 (Closures) | Swift
명명된 함수 생성없이 실행되는 코드 그룹입니다. 클로저 (Closures) 는 코드에서 주변에 전달과 사용할 수 있는 자체 포함된 기능 블럭입니다. Swift의 클로저는 다른 프로그래밍 언어에서 클로저,
bbiguduk.gitbook.io
고차함수
map
야구게임 보완에서 다룸.
compactMap
map + 옵셔널 제거
옵셔널 타입의 배열일 경우 사용함
flatMap
배열안에 배열이 있는 경우 하나의 배열으로 만들어줌
filter
reduce
제거한다 ( 배열을 제거하고 하나의 값으로 만듦)
배열의 아이템을 결합해서 하나의 값으로 리턴
초기값이 필요함
array.reduce(초기값)
forEach
각각의 아이템을 활용, 특정 작업을 실행
출처) 앨런 Swift문법 마스터스쿨
'내일배움캠프 iOS' 카테고리의 다른 글
iOS) TIL #21 계산기 앱 만들기 Lv 3~5 / 해설영상 6~8 추가 (0) | 2024.11.18 |
---|---|
iOS) TIL #19 계산기 앱 만들기 - Lv 1, Lv 2 (1) | 2024.11.14 |
iOS) TIL #17 내배캠 앱 개발 입문 2 - 스냅킷 (0) | 2024.11.12 |
iOS) TIL #16 내배캠 앱 개발 입문 (7) | 2024.11.11 |
iOS) TIL #15 야구게임 보완, 고차함수 map (3) | 2024.11.08 |