후행 클로저 : Trailing closure라고 하며  파라매터중  마지막 파라매터가 클로저일 경우 파라매터 레이블을 사용하지 않고 바로 클로저로 사용하는 것을 후행 클로저 라고 한다.

 

다음은 UIAleartAction 클래스의 인스턴스를 생성하는 과정이다.

 

UIAleartAction의 Initailizer를 보면 아래와 같은데 주목할 부분은 마지막 파라매터인 handler이다.

handler의 타입은 반환형이 Void인 옵셔널 함수이다.

 

@여기서 함수형이 옵셔널인 이유는 아무 동작도 하지 않는 UIAleartAction형 인스턴스 변수를 생성할 수 있기 때문이다.

 

이제 인스턴스를 생성해 보자

1
2
3
4
let offAction = UIAlertAction(title: "아니오, 끕니다(off)", style: UIAlertAction.Style.default,
                                      handler: {
                                        ACTION in self.lampImg.image = self.lampOff
                                        self.isOn = false})

offAction이라는 변수를 생성했고 파라매터 값으로 각각의 문자열, 스타일을 넣어주는 모습을 확인 할 수 있다.

 

마지막 파라매터는 클로저 함수(익명함수)로 함수인데 이름이 없는 함수라고 할 수 있다.

 

함수의 이름을 붙이는 이유는 다시 사용하기 위해서 이름을 붙여주고 정의를 한뒤 호출해서 사용한다. 하지만 스위프트는 재사용 필요가 없는 한번만 쓰면 되는 함수를 코드안에 바로 짜넣을 수 있는데 그것이 바로 클로저 함수라고 한다.

 

위와 같은게 클로저 함수 이고 위 코드를 후행 클로저로 짯을때를 비교해보자

1
2
3
4
let offAction = UIAlertAction(title: "아니오, 끕니다(off)", style: UIAlertAction.Style.default)
{
                                        ACTION in self.lampImg.image = self.lampOff
                                        self.isOn = false}

위와 다른 점은 마지막 파라매터의 내부 매개변수명(파라매터의 레이블)이 없어지고 바로 괄호를 닫고 클로저를 삽입했다는 점이다.

 

그래서 클로저 함수는 마지막파라매터가 클로저 함수일때 파라매터의 레이블을 생략해버리고 괄호를 닫은뒤 클로저 함수를 삽입해도 에러 없이 실행이 가능하다.

'IOS > 레포트' 카테고리의 다른 글

1203 - Table  (0) 2019.12.03
Failable Initializers / 1.jpg (문자열 자르기)  (0) 2019.11.05
Swift와 Object-C 차이  (0) 2019.10.15

+ Recent posts