[Swift 문법] - Closure_01

sun02·2021년 7월 11일
0

100 days of Swift 

목록 보기
5/40

1. Creating basic closures

Swift에서 함수를 문자열이나 정수형처럼 사용할 수 있다.
이는 생성한 함수를 변수에 할당할 수 있고
함수를 변수를 사용하여 호출할 수도 있고
함수를 매개변수처럼 다른 함수에 전달할 수도 있다는 것을 의미한다.

let driving = {
   print(“I’m driving in my car”)
}
  • 메시지를 출력하는 간단한 예제로부터 시작해 보자

이것은 함수를 이름 없이 만들고 그 함수를 driving에 할당한 것이다.

driving()
  • 이제 너는 일반 함수처럼 driving()을 호출할 수 있다.

2. Accepting parameters in a closure

클로져를 만들 때 클로져에는 매개변수를 작성할 이름이나 공간이 없다.
클로져는 매개변수를 다른 방식으로 받는다 - 매개변수가 중괄호 안에 나열된다.

클로져가 매개변수를 받게하기 위해서
매개변수를 중괄호 바로 뒤의 괄호 안에 나열하고
in을 적어 스위프트에 클로져의 본문이 시작되는 것을 알려준다.

let driving = { (place: String) in
   print(“I’m going to \(place) in my car”)
}
  • 장소 이름 문자열을 유일한 매개변수로 받는 클로져를 다음과 같이 만들 수 있다.

함수와 클로져의 한 가지 차이점은 클로져를 실행할 때는 매개변수 레이블을 사용하지 않는다는 것이다.

driving(“London”)
  • 따라서, driving()을 호출할 때 다음과 같이 적는다.

3. Returning values from a closure

클로져도 값을 반환할 수 있고 매개변수와 비슷하게 작성된다 : 클로져 안에서 in 키워드 바로 앞에 적는다.

let driving = { (place: String) in
   print(“I’m going to \(place) in my car”)
}

👇🏻

let drivingWithReturn = { (place: String) -> String in
   return “I’m going to \(place) in my car”
}
  • 클로져가 메시지를 바로 출력하기 보다 문자열을 반환하길 바라기 때문에 in 앞에 -> String을 쓰고 일반 함수처럼 return을 사용한다.
let message = drivingWithReturn(“London”)
print(message)
  • 이제 이 클로져를 실행하고 그 반환값을 출력할 수 있다.

4. Closures as parameters

클로져가 문자열이나 정수처럼 사용될 수 있기 때문에 클로져를 함수로 전달할 수도 있다.

let driving = {
   print(“I’m driving in my car”)
}
  • 먼저, 기본 driving() 클로져이다.

만약 이 클로져를 함수로 전달하여 함수 안에서 실행되길 원한다면, 우리는 매개변수 타입을 () -> Void로 지정해야한다.
이는 “매개변수를 허용하지 않고 Void를 반환합니다” 라는 의미이다 – 이것은 Swift식으로 “nothing”을 말하는 것이다.

func travel(action: () -> Void) {
    print(“I’m getting ready to go.”)
    action()
    print(“I arrived!”)
}
  • 다양한 종류의 action을 받고 그 전,후로 메세지를 출력하는 travel() 함수이다.
travel(action: driving)
  • 이제 다음과 같이 driving 클로져를 호출할 수 있다.

5. Trailing closure syntax

만약 함수의 마지막 매개변수가 클로져라면 Swift는 trailing closure syntax라고 불리는 특별한 구문을 사용하게 할 것이다.
클로져를 매개변수로 전달하기보다 중괄호 안의 함수 바로 뒤로 전달한다.

func travel(action : () -> Void) {
    print(“I’m getting ready to go.”)
    action()
    print(“I arrived!”)
}
  • 두 개의 print() 호출 사이에서 실행되는 action 클로져를 받는 travel() 함수가 다시 등장한다.

이 함수의 마지막 매개변수가 클로져이기 때문에

travel() {
    print(“I’m driving in my car”)
}
  • 우리는 travel()을 다음과 같이 trailing closure syntax를 사용하여 호출할 수 있다.
travel {
   print(“I’m driving in my car”)
}
  • 사실 매개변수가 없기 때문에 괄호를 완전히 제거해도 된다.

Trailing closure syntax (후행 클로져 구문)은 스위프트에서 매우 자주 사용되기때문에 익숙져야한다.

출처

0개의 댓글