Swift/swift 문법
클로저 (1급 객체)
Lyla.
2023. 4. 18. 19:03
: 보통은 익명 함수를 뜻함. 일반적인 함수는 named closure이다.
클로저는 익명함수지만 1급 객체 함수의 특성을 지닌다.
-> 1급 객체*의 특성
: 함수를 타입으로 인식
1. 함수를 변수에 할당할 수 있음
2. 어떤 함수를 호출할 때 파라미터로서 전달할 수 있음
3. 함수에서 함수를 반환할 수 있음.
표현식
var closure : (parameter) -> return_type = {(value : type) -> return_type in
//code
}
//ex
// "Hello World"를 출력하는 익명함수
var str_closure : () -> String = { () -> String in
return "Hello World"
}
var str_closure = {() -> String in
return "Hello World"
}
탈출 클로저 (@escaping)
클로저의 실행이 본래 함수를 벗어나서도 실행되도록 하는 키워드
언제 사용하는가?
- 내부 클로저를 외부 변수에 저장
- GCD (비동기 코드 사용)
func something2(a: Int, mainwork2: @escaping () -> () ) {
print(a)
DispatchQueue.main.async {
mainwork2()
}
print("종료")
}
클로저는 언제 사용하는가?
: 함수를 사용할 때.. 이외에도 콜백함수로 주로 사용 된다.
//⭐️함수 실행 시⭐️ 실행될 클로저를 정의해주어야함
func something(a: Int, mainwork1: @escaping () -> () ) {
print(a)
DispatchQueue.main.async {
mainwork1()
}
print("종료")
}
//실행 시에 mainwork1 클로저 실행 내용 서술
something(a: 1) {
print("mainwork1 클로저의 실행입니다. ")
}