// Closure 보강!!!!
// 함수는 어떤 기능을 수행하는 코드블록이며,
// Swift에서는 함수와 같이 기능을 수행하는 코드블록의 특별한 타입인 Closure가 존재한다. 사실 Closure가 더 상위 개념이다
// Swift 공식사이트에서 정의한 Closure:
// Closure는 크게 3가지 타입이 존재한다.
// Global functions are closures that have a name and don’t capture any values.
// Nested functions are closures that have a name and can capture values from their enclosing function.
// Closure expressions are unnamed closures written in a lightweight syntax that can capture values from their surrounding context.
// 1. Global함수 : 전역함수
// 2. Nested함수 : 함수안에 함수를 정의하는 함수
// 3. Closure Expressions : 우리가 배울 것!! 이름이 없고 주변의 값들을 캡쳐할수있는 가벼운 문법인 Closure type이다. 실제 우리가 통상적으로 Closure라고 하는 것이다.
// function과 closure는 인자받기, 값리턴, 변수로 할당이 가능, First Class Type이다.
// function은 이름이 있고 func 키워드를 사용한다. Closure는 이름없고, 키워드없다.
// First Class Type 은 어떤 type을 말하는 것일까??
// 변수에 할당할 수 있다. 인자로 받을 수 있다. 리턴할 수 있다.
// Closure는 실무에서 어떻게 쓸모가 있는가?
// 실무에서는 다음의 형태로 자주 쓰인다.
// 1. Completion Block: 어떤 task가 완료 되었을 때 수행되는 Closure이다.
// 앱에서 네트워크를 통해 데이터를 받아오면 네트워크 환경에 따라 빠를수도 느릴수도 있다. 비동기적으로 언제 끝나는지 모르는 task의 경우 완료 시 장치를 두게 되는데 이때 Closure를 수행하도록 설정한다.
// 2. Higher Order Functions: input으로 함수를 받을 수 있는 유형의 함수를 고귀함수(Higher Order Functions)라고 한다. 이렇게 input으로 넣어주는 함수의 경우 GlobalFunction으로 넘겨줄수도 있지만, Closure를 자주 사용하게 된다.
// 실습
// { (parameters) -> return type in
// statements
// }
// Example 1: Cho Simple Closure
let choSimpleClosure = {
}
choSimpleClosure() //Closure 실행문
// Example 2: 코드블록을 구현한 Closure
let SimpleClosure = {
print("Hello, 클로져 하이")
}
SimpleClosure()
// Example 3: 인풋 파라미터를 받는 Closure
let Closure_3: (String) -> Void = { str in
print(str)
}
Closure_3("3번예제 안녕")
// Example 4: 값을 리턴하는 Closure
let Closure_4: (String) -> String = { str in
let message = "4번예제 안녕, \(str)님"
return message
}
print(Closure_4("사아아번"))
// Example 5: Closure를 파라미터로 받는 함수 구현
func someSimpleFunction(choSimpleClosure: () -> Void) {
print("5번예제")
choSimpleClosure()
}
someSimpleFunction(choSimpleClosure: {
print("안녕코로나야")
})
// Example 6: Trailing Closure
func someSimpleFunction(message:String, choSimpleClosure: () -> Void) {
print("6번예제, 메세지는: \(message)")
choSimpleClosure()
}
// someSimpleFunction(message: "로나로나메로나", choSimpleClosure: {
// print("안녕코로나야")
// })
// 여기서 더욱 많은 인자를 받게 되면 코드의 직관성, 가독성이 떨어져 헷갈린다.
// 그래서 Swift에서는 제일 마지막인자가 Closure인 경우 특이한 생략이 가능하다.
someSimpleFunction(message: "로나로나메로나") {
print("안녕코로나야")
}
'Toy Project > Swift Language Syntax' 카테고리의 다른 글
9. Swift Structure practice (0) | 2021.01.21 |
---|---|
8. Swift Structure (0) | 2021.01.21 |
6. Swift Closure basic (0) | 2021.01.21 |
5. Swift Collection(Dicionary, Set) (0) | 2021.01.21 |
4. Swift Collection (Array) (0) | 2021.01.21 |