클로저
: 특정 작업(함수)과 그 작업이 일어난 곳(환경 또는 상태)을 모두 기억하고 있는 도구
표현식
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 |