티스토리 뷰

Swift

[스위프트] 클로저 정리

Hani_Levenshtein 2021. 5. 14. 00:58

안녕하세요 Hani입니다.

이번에는 클로저를 알아보겠습니다.

 

클로저를 공부하려고 마음먹은 계기는 ..!

Action Sheet를 사용하려고 했는데 Action을 누르면 어떤 행동을 할 것인지 정하는 handler가 있었기 때문이에요.

 

사실 비슷한 인자를 Present에서도 본 적이 있습니다.

다만 화면 전환만을 목적으로 할 때는 이 인자에 굳이 뭘 넣을 필요가 없었기 때문에 그냥 넘어갔었어요🥺

하지만 Action Sheet는 눌렀을 때의 동작을 직접 넣어줘야 하기 때문에 지나칠 수 없었답니다.

 

하여튼 클로저라는 게 스위프트에서 처음 접한 생소한 단어라서..

일단 빌드업으로 함수에 대하여 얘기해보겠습니다. 

 

//function
func summation(_ L: Int, _ R:Int) -> Int {
	return L + R
}

일반적인 함수죠? func 키워드로 자신을 함수라고 알려주고 있고...

summation이라는 자신만의 이름을 갖고 있고,

매개변수와 반환할 타입 그리고 함수가 실행됐을 때 어떤 행동을 할지 적혀있습니다.

 

//closure
{ (parameters) -> return type in
    statements
}

그리구 클로저는 뼈대는 이렇게 생겼습니다.

생각해보면 우리가 알고 있던 함수는 func 키워드와 자신만의 이름을 갖고 있는 클로저의 특수한 형태라고 할 수 있어요.

 

실제로 어떻게 쓰는지 한 번 알아보겠습니다. 😎

 

오름차순으로 정수를 정렬해주는 sorted 고차함수에요. (괄호 안에 있는거 디폴트로 오름차순이지만...)

클로저는 여러가지 축약형이 존재하는데 가독성을 해치지 않는 선에서 줄여 사용하면 코드가 깔끔해집니다.

 

 

다시 Action Sheet로 돌아가서 코드를 확인해보면

actionSheet.addAction(UIAlertAction(title: "", style: .default, handler: { action in
	//push or present
}))

actionSheet.addAction(UIAlertAction(title: "", style: .default) {
	//push or present
})

Trailing Closures로 표현했을 때 더 간단해집니다.

 


References

https://docs.swift.org/swift-book/LanguageGuide/Closures.html

https://github.com/yeojaeng/Study_Log/blob/master/iOS/Contents/Closure.md

 

댓글