iOS

Closure(클로저)15

도도.__. 2024. 12. 11. 15:31

클로저 (Closure)

  • https://en.wikipedia.org/wiki/Closure_(computer_programming)
  • 익명함수
  • C, C++, Objective-C의 block
  • Java의 Lambda function
  • C#의 Delegates
  • 코드 블록
    • 변수나 상수에 저장할 수 있음
    • 다른 함수에 전달할 수 있음
    • 함수로부터 반환할 수도 있음
  • 비동기 작업이나 콜백을 처리할 때 유용
let greeting = { print("안녕하세요!") }
greeting()  // 안녕하세요!

여기서 add1의 자료형은 let add1: (Int, Int) -> Int

함수를 클로저로 변경

함수 버전

func add(x: Int, y: Int) -> Int {
    return(x+y)
}

print(add(x:10, y:20))

클로저 버전

let add1 = { (x: Int, y: Int) -> Int in
    return(x+y)
}

클로저 일반 형식

{(<매개변수 이름>: <매개변수 타입>, … ) -> <반환 타입> in
    // 클로저 표현식 코드
}

호출 예시

print(add1(x:10, y:20))   // 주의 error: extraneous(관련 없는) argument labels 'x:y:' in call
print(add1(10, 20))       // OK
print(type(of:add1))      // 과제

후행 클로저(trailing closure)

func someFun(cl: () -> Void) {

}
// trailing closure를 사용 안하면
someFun(cl: {
    // closure’s body
})
// trailing closure 사용
someFun() {
    // trailing closure's body goes here
}

정의를 뒤에 할 수 있음.

//1
result = math(x: 10, y: 20, cal: {(a: Int, b: Int) -> Int in
    return a + b
}) //클로저 소스를 매개변수에 직접 작성

//2
result = math(x: 10, y: 20) {(a: Int, b: Int) -> Int in
    return a + b
} //후행 클로저(trailing closure)

둘의 작동은 똑같지만 후행 클로저가 보기 편하기 때문에 2번째를 선호함.
1번째는 함수 실행과 정의를 동시에 하는 것처럼 보여서 이상함.(작동은 잘 되긴 함.)

 

출처: https://www.youtube.com/@smilehan8416

'iOS' 카테고리의 다른 글

iOS - 13주  (0) 2024.11.27
iOS - 12주차  (0) 2024.11.20
iOS-11주  (1) 2024.11.13
10주차  (1) 2024.11.06
iOS- 9주  (0) 2024.10.30