오늘은 함수를 이어서 클로저를 정리 해볼까 한다.
클로저란?
보통은 익명함수를 말한다. (Unnamed Closure)
하지만 평소에 쓰는 func name 이 붙은 함수도 클로저라고 한다. (Named Closure)
func function() { //함수
print("Named Closure")
}
let closure = { print("Unnamed Closure") } //클로저
클로저 기본 형식
{(파라미터) -> 리턴타입 in
실행할 코드}
ex)
{(text: String) -> Int in
return text.count}
{() -> ()
print("안녕하세요")}
Argument Label 을 사용하지 않는다.
let closure = {(text: String) -> Int in
return text.count}
closure("123456") //6
closure(text: "123456") //에러남
클로저 실행방법
let closure = { () -> () in
print("클로저 입니다.")
}
closure() //()를 사용하여 실행시킨다
({ () -> () in
print("바로 실행 합니다.")
})()
//()로 감싸고 ()를 사용하면 일회용으로 실행하는 클로저도 만들수 있다.
클로저 축약문법
func runClosure(closure: () -> ()) {
closure() //파라미터로 받은 클로저를 실행한다.
}
위에 함수처럼 파라미터를 클로저 하나만 받는 함수가 있다면
runClosure(closure: { () -> () in
print("클로저 호출입니다.")
})
이런식으로 파라미터에 클로저를 담아 호출할 것이다.
파라미터를 클로저 하나만 받는 함수는 클로저를 소괄호 밖으로 뺀뒤에 파라미터이름을 생략하고 바로 소괄호 뒤에 바로 붙여서 쓸 수 있다.
가독성을 위해서 인거 같다.
runClosure () { () -> () in //소괄호에서 빼낸뒤 뒤에 붙임
print("클로저 호출입니다.")
}
runClosure { () -> () in
print("클로저 호출입니다.")
}
파라미터가 클로저 하나 뿐이면 소괄호도 생략가능
파라미터가 여러개 있는 함수도 문법을 축약할 수 있는데 많이 쓰이는 map 함수를 통해 설명을 해보겠다.
let arr1: [Int] = [1, 2, 3, 4, 5]
var arr2 = arr1.map({ (num: Int) -> Int in
return num*3
})
/*이렇게 된것을 축약한 것인데 함수에 파라미터가 클로저 하나일 경우 ()를 생략 할수 있다.*/
arr1.map{ (num: Int) -> Int in
return num*3
} //()생략
/*파라미터형식과 리턴형식도 생략할수 있다.*/
arr1.map{ (num) in
return num*3
} //파라미터형식, 리턴형식 생략
/*파라미터를 인자 이름 축약(Shorthand Arguments Names)을 통하여
$0표시를 통해 간단하게 표현할수 있다.*/
arr1.map{
return $0*3
} //파라미터와 in 을 생략해도 된다.
/*마지막으로 리턴문만 남았을 경우 그것마저 생략할수 있다.*/
arr1.map{ $0*3 } //map 함수의 가장 간단한 형태
'Swift' 카테고리의 다른 글
Swift)고차함수 filter (0) | 2024.05.10 |
---|---|
Swift) 고차함수 map (0) | 2024.05.09 |
Swift) 함수 Function (0) | 2024.05.03 |
Swift) 기본 연산자 (2) | 2024.05.01 |
Swift) 옵셔널(Optional) (0) | 2024.04.29 |