[iOS] Closure 1
Closure
Closure 는
중괄호 { }
로 감싸진 실행 가능한 코드블록을 말한다.
어떤 상수나 변수의 참조를
캡쳐 [ capture ] 해서 저장할 수 있다.
Swift 는 이 캡쳐와 관련한 모든 메모리를
알아서 처리한다.
매개변수를 받을 수 있고,
반환 값이 존재할 수 있다는 점에서 함수와 동일하다.
❓ Closure 를 사용하는 이유
클로저를 사용하는 가장 일본적인 이유 중 하나는
기능을 저장하는 것이다.
클로저를 통해, 일부 기능을 단일 변수로 마무리하고
어딘가에 저장할 수 있다.
기능에서 return
하고
클로저를 다른 곳에 보관할 수 있다.
Closure 는 크게 세 가지로 나눌 수 있다.
🌵 Global Function
'Named Closure' 라고도 한다.
func
라는 키워드를 이용해 이름을 붙여주는,
'함수'라고 부르는 것이 이에 해당된다.
🌵 중첩 함수 [ Nested Function ]
함수 내부에서 다시 함수를 정의하여 사용하는 함수이다.
내부 함수는 숨겨져있고,
선언된 함수 내부에서만 호출이 가능하다.
// example1
func calcDecrement(forDecrement total: Int) -> () -> Int {
var overallDecrement = 0
func decrementer() -> Int {
overallDecrement -= total
return overallDecrement
}
return decrementer
}
let decrem = calcDecrement(forDecrement: 30)
print(decrem()) // -30
🌵 Closure expression
'Unnamed Closure' 라고도 하며,
일반적으로 클로저라고 부르는 것이 이에 해당된다.
{(parameters) -> return type in
// statements
}
클로저는 일급 객체이기 때문에
변수에 할당 될 수 있다.
// example2
let closureValue = { (name: String) in print(name) }
closureValue("Eugenie") // Eugenie
함수의 매개변수로 전달 될 수 있다.
// example3
func closureOperation(closure: () -> Void) {
// Some code here
}
일급 객체
▶️ 변수나 데이터 구조 안에 담을 수 있다.
▶️ 매개변수로 전달 할 수 있다.
▶️ 반환값으로 사용할 수 있다.
▶️ 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
▶️ 동적으로 프로퍼티 할당이 가능하다.
Closure Parameter
클로저에서 매개변수는 { }
안에 나열된다.
클로저가 매개변수를 받아들이도록 하려면,
다음과 같이 작성하면 된다.
// example4
let favorite = { (color: String) in
print("My favorite color is \(color)!")
}
favorite("blue") // My favorite color is blue!
in
은 클로저가 시작된다는 것을 알려주는 것이다.
호출할 때는
함수와는 달리, 변수레이블을 사용하지 않는다.
📚 Reference
Swift 의 Closure
Swift) 클로저(Closure) 정복하기(1/3) - 클로저, 누구냐 넌
Swift: 기초문법 [#1 클로저 기본 - Closure]
Author And Source
이 문제에 관하여([iOS] Closure 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eugenie8/iOS-Closure-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)