[Swift] closure (클로저)

CHO·2023년 4월 2일
0

[Swift] 공부하기

목록 보기
11/13

클로저?
참조타입! 코드에서 전달 + 사용할 수 있는 독립 기능 블록, 일급객체의 역할을 한다

일급객체 : 전달인자로 보낼 수 있고, 변수 상수 등으로 저장하거나 전달할 수 있고, 함수의 반환값이 될 수 도 있음

/*
클로저 : named / unnamed가 있다

{ (매개변수) -> 리턴타입 in // 클로저 헤드
실행구문 // 클로저 바디
}
*/

let hello = { () -> () in
print("hello")
}

hello()

let hello2 = { (name: String) -> String in
return "Hello, (name)"
}

// 클로저는 전달인자 레이블을 사용하지 않는다
// 파라미터 이름만 사용된다

// hello2(name: "world") // error 발생
hello2("world") // 출력 ok / 전달인자 레이블 적지 않고 파라미터의 값을 넘겨줘야한다

func doSomething(closure: () -> ()){
closure()
}

doSomething() {
print("hello22")
}

doSomething {
print("hello23")
} // 소괄호도 생략 가능

// 클로저 함수에 파라미터만 넘기겠다
doSomething(closure: { () -> () in
print("hello~~~")

})

// 반환타입이 없는 클로저 작성

func doSomething2() -> () -> () {
//클로저 반환하게 하는 함수

return { () -> () in
    print("hello4")
}

}

doSomething2()()

// 일급객체 특성을 가지고 있어서 변수, 상수 대입할 수 있고
// 함수 파라미터로 전달받을 수 있고, 리턴타입으로도 사용할 수 있다

// 후행클로저 : 가독성 높이는 방법
// 매개변수 여러개일 경우 마지막 클로저만 후행클로저 사용 가능하다

// 다중 후행 클로저 문법 사용 가능
doSomething2()()

// 함수 선언되어있고 매개변수 2개가 있어서, 다중 후행 클로저 문법 사용 가능
func doSomething2(success: () -> (), fail: () -> ()) {

}

// 첫번째 클로저(success) 매개변수 레이블을 생략한다
doSomething2 {
<#code#>
} fail: {
<#code#>
}

//클로저 표현 단순화하기
func doSomething3(closure: (Int, Int, Int) -> Int){
closure(1,2,3)
}

doSomething3 { (a, b, c) in
return a+b+c
}

doSomething3(closure: {
$0+$1+$2
})

doSomething3(){
$0+$1+$2
}

doSomething3 {
$0+$1+$2
}

profile
매일 개념 익히고 적용합니다

0개의 댓글