안녕하세요 후르륵 짭짭 입니다.
오늘은 클로저의 noneEscaping 함수에 대해서 알아보려고 합니다!
nonEscaping은 딱 봐도 "도망칠 수 없는"으로 해석이 되져?
예! 맞습니다. nonEscaping 함수는 도망 칠수 없는 겁니다.
예시를 보도록 할게요
func mathFunction(one : Int , two : Int , formula : (Int,Int) -> (Int)) -> Int{
let result = formula(one,two)
print("결과를 받았다")
return result + 10
}
이 함수의 구조를 보도록 하겠습니다.
one과 two 로 Int 형을 받는 두개의 변수가 있네요. 그리고 정수 두개를 받아서 Int를 반환하는 formula 함수가 있고 최종적으로 Int를 반환해야하군요 ㅎㅎㅎㅎ
그리고 result 에 formula 값을 받고 result + 10 을 한 것을 반환 하는 군요
print(mathFunction(one: 10, two: 5, formula: addTwoNumber))
이렇게 함수를 호출하면 결과는 25가 나옵니다!
순서가 어떻게 되는 걸까요?
let addTwoNumber : (Int, Int) -> (Int) = { (one : Int, two : Int) -> (Int) in
(2)
print("덧셈")
(3)
return one + two
}
func mathFunction(one : Int , two : Int , formula : (Int,Int) -> (Int)) -> Int{
(4) (1)
let result = formula(one,two)
(5)
print("결과를 받았다")
(6)
return result + 10
}
(7)
print(mathFunction(one: 10, two: 5, formula: addTwoNumber))
처음에 matFunction이 호출 되면
formula 함수를 호출 시킵니다 -> 그리면 formula가 addTwoNumber로 되어 있으니 addTwoNumber를 수행하고 결과를 반환 합니다.
-> 그런 다음 나머지 5 번과 6번을 수행하고 최종결과 7번 을 하게 됩니다.
그러면 결과는 어떻게 나올 까요?
덧셈
결과를 받았다
25
이렇게 나옵니다!
순서가 일정하죠??
이게 nonEscaping 클로저 입니다!
어디로 도망 갈 수가 없어요!
이번에는 다른 예시를 보겠습니다.
print(mathFunction(one: 10, two: 5, formula: { (one, two) -> (Int) in
return (one * two) * 1000
}))
만약에 우리가 formula를 addTwoNumber 가 아닌 저렇게 직접 선언 하면 어떻게 될까요?
결국은 같습니다.
nonEscaping 이기 때문에, 순서는 같지만 클로저의 장점은 항상 다르게 내용을 정할 수 있다는 거죠!
그래서 많은 고차함수들이 저렇게 클로저로 구성되어 있는 거랍니다!!
잘 설명이 된지 모르겠지만 ㅎㅎㅎ
큰 도움이 됐으면 합니다!!
모두모두 즐코하세욧!!!
'Xcode > Swift - PlayGround' 카테고리의 다른 글
PlayGround) Struct 와 Class의 차이 그리고 Protocol (1) | 2020.07.23 |
---|---|
PlayGround) SQLite를 이용하여 데이터를 저장하자! (0) | 2020.07.18 |
PlayGround) Closure에 대해서 알아보자 1부 (Expression) (0) | 2020.07.16 |
PlayGround) Delegate에 대해서 알아보자 (0) | 2020.07.04 |
PlayGround) URL을 통해 GET&POST HTTP 통신 알아가기 (5) | 2020.06.30 |
댓글