iOS

[iOS] 클로저 알아보기

코딩하는둥이 2023. 10. 6. 11:27

클로저

 : 특정 작업(함수)과 그 작업이 일어난 곳(환경 또는 상태)을 모두 기억하고 있는 도구

 표현식

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)
}

print(type(of:add1)) //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)
}
print(add1(10, 20)) // 30 (Int, Int) -> Int

 

후행클로저

 : 클로저가 함수의 마지막 argument라면 마지막 매개변수명(cl)을 생략한 후 함수 소괄호 외부에 클로저를 작성

// 클로저
func someFunction(arg1: Int, arg2: () -> Void) {
    // 함수 내용
}

// 함수 호출
someFunction(arg1: 42, arg2: {
    // 클로저 내용
})

//후행 클로저
func someFunction(arg1: Int, arg2: () -> Void) {
    // 함수 내용
}

// 후행 클로저 사용
someFunction(arg1: 42) {
    // 클로저 내용
}

* 클로저가 함수의 마지막 argument라면 마지막 매개변수명(cal)을 생략한 후 함수 소괄호 외부에 클로저를 작성

 

클로저 축약 표현들

1) 매개변수 타입 생략

: 클로저의 매개변수 타입을 Swift가 타입 추론을 통해 자동으로 알 수 있는 경우, 매개변수 타입을 생략할 수 있습니다.

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

// 축약 표현
let closure: (Int, Int) -> Int = {
    return $0 + $1
}

2) 단축 인자 이름 사용

: 매개변수를 $0, $1, $2 등과 같은 단축 인자 이름으로 대체할 수 있습니다.

let closure: (Int, Int) -> Int = { $0 + $1 }

3) 단일 표현식 클로저의 반환 생략

 : 클로저가 단일 표현식(한 줄로 끝나는 표현식)을 가질 때 return 키워드와 중괄호를 생략할 수 있습니다.

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

// 또는

let closure: (Int, Int) -> Int = { $0 + $1 }

4) 클로저를 함수의 마지막 인자로 사용할 때의 후행 클로저

: 함수의 마지막 인자로 클로저를 전달할 때 클로저를 괄호 밖에 작성할 수 있습니다.

func performOperation(x: Int, y: Int, operation: (Int, Int) -> Int) -> Int {
    return operation(x, y)
}

let result = performOperation(x: 10, y: 5) { $0 + $1 }

5) 클로저 표현식을 변수에 할당

: 클로저 표현식을 변수에 할당할 때, 변수의 타입을 생략할 수 있습니다.

let multiply: (Int, Int) -> Int = { $0 * $1 }

// 타입 생략
let multiply = { $0 * $1 }

'iOS' 카테고리의 다른 글

[iOS] 기초문법  (0) 2023.10.16
[iOS] 함수와 매서드  (0) 2023.10.15
[iOS] 1급 객체(1급 시민) 알아보기  (0) 2023.10.04
[iOS] 기초문법  (0) 2023.09.25
[iOS] 문법 - 옵서널 타입  (0) 2023.09.18