λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

🍎 iOS/Swift

[Swift] Escaping Closure(νƒˆμΆœ ν΄λ‘œμ €)

μ§€λ‚œ ν¬μŠ€νŒ…μ—μ„œ ν΄λ‘œμ €(Closure)의 기본적인 κ°œλ…μ— λŒ€ν•΄ μ •λ¦¬ν–ˆμ—ˆλŠ”λ°μš”,

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” Escaping Closure에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€!😊

 

ν΄λ‘œμ €μ— λŒ€ν•΄ 잘 λͺ¨λ₯΄μ‹œκ² λ‹€λ©΄ μ§€λ‚œ ν¬μŠ€νŒ…μ„ 보고 μ˜€μ‹œλŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€!

 

[Swift] ν΄λ‘œμ €(Closure)

μ΅œκ·Όμ— iOS μŠ€ν„°λ”” μΉœκ΅¬λ“€κ³Ό ν•¨κ»˜ ν΄λ‘œμ €μ— λŒ€ν•΄ κ³΅λΆ€ν•΄λ³΄μ•˜λŠ”λ°μš”, λΈ”λ‘œκ·Έμ—λ„ κ·Έ λ‚΄μš©μ„ ν•œλ²ˆ 정리해보렀고 ν•©λ‹ˆλ‹€!😊 데이터 전달, μ„œλ²„ 톡신 λ“± λ‹€μ–‘ν•œ μƒν™©μ—μ„œ μœ μš©ν•˜κ²Œ μ΄μš©κ°€λŠ₯ν•œ 클둜

janechoi.tistory.com


Escaping Closureλž€?

 

escaping closureλŠ” 해석 κ·ΈλŒ€λ‘œ νƒˆμΆœ ν΄λ‘œμ €λΌκ³ λ„ λΆˆλ¦¬λŠ”λ°μš”,

말 κ·ΈλŒ€λ‘œ 'νƒˆμΆœ κ°€λŠ₯ν•œ' ν΄λ‘œμ €λΌκ³  ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νƒˆμΆœ..? μ–΄λ””λ₯Ό νƒˆμΆœν•΄...? λΌλŠ” 의문이 λ“œμ‹€ 것 κ°™μ€λ°μš”,
μ˜ˆμ‹œλ₯Ό 톡해 κΈ°λ³Έ ν΄λ‘œμ €μ™€ λΉ„κ΅ν•˜λ©° 이해해보도둝 ν•©μ‹œλ‹€!!

 

이전 ν¬μŠ€νŒ…μ—μ„œ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λ‘œ ν΄λ‘œμ €λ₯Ό 전달할 수 μžˆμŒμ„ μ„€λͺ…ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν–ˆλ˜ μ˜ˆμ‹œλ₯Ό κ·ΈλŒ€λ‘œ λ“€κ³  와 μ„€λͺ…ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€!

// ν•¨μˆ˜λ₯Ό νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λ°›λŠ” doSomethingμ΄λΌλŠ” ν•¨μˆ˜
func doSomething(closure: () -> ()) {
    closure()
}

 

이 ν•¨μˆ˜μ— ν΄λ‘œμ €λ₯Ό νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬ν•΄μ„œ μ‹€ν–‰μ‹œμΌœλ³Έλ‹€λ©΄?

 

 

μœ„μ˜ μ½”λ“œλŠ” doSomething ν•¨μˆ˜μ— print("Hello!")λΌλŠ” ꡬ문이 λ‹΄κΈ΄ ν΄λ‘œμ €κ°€ closureλΌλŠ” μ΄λ¦„μ˜ νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λœ μƒνƒœμΈλ°μš”,

viewDidLoad()μ—μ„œ 호좜이 되면 doSomething ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ closure λΌλŠ” μ΄λ¦„μœΌλ‘œ 싀행이 λ©λ‹ˆλ‹€.

μ‹€ν–‰ ν›„ μ½˜μ†”μ„ 확인해보면 Hello! κ°€ 잘 찍힌 것을 λ³΄λ‹ˆ 호좜 ν›„ μ‹€ν–‰κΉŒμ§€ 잘 되고 μžˆμŠ΅λ‹ˆλ‹€!

 

그런데, λ§Œμ•½ 이 ν΄λ‘œμ €λ₯Ό μ €μž₯해놓고 λ‹€λ₯Έ κ³³μ—μ„œ ν˜ΈμΆœν•˜λ €κ³  ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”?

ν΄λ‘œμ €μ˜ μΌκΈ‰κ°μ²΄μ˜ νŠΉμ„±μ„ ν™œμš©ν•΄μ„œ ν•¨μˆ˜ 외뢀에 ν΄λ‘œμ €λ₯Ό λ‹΄λŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ„œ

이 λ³€μˆ˜μ—λ‹€κ°€ νŒŒλΌλ―Έν„°λ‘œ λ„˜μ–΄μ˜¨ ν΄λ‘œμ €λ₯Ό λ‹΄μ•„ μ €μž₯ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€!

 

외뢀에 μ„ μ–Έλœ λ³€μˆ˜μΈ nonEscapingClosure에 closureλΌλŠ” μ΄λ¦„μ˜ νŒŒλΌλ―Έν„°λ‘œ λ„˜μ–΄μ˜€λŠ” ν΄λ‘œμ €λ₯Ό λ„£μœΌλ €κ³  ν•˜λ‹ˆ  

μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” 것을 확인할 μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€!

 

μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό ν™•μΈν•΄λ³΄λ‹ˆ closureλΌλŠ” μ΄λ¦„μ˜ non-escaping νŒŒλΌλ―Έν„°λ₯Ό escaping closure둜 μ„ μ–Έν•˜λΌκ³  ν•˜λ„€μš”!

 

이 μ—λŸ¬λ₯Ό 톡해 μ•Œ 수 μžˆλŠ” 것은  

Swiftμ—μ„œ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λœ ν΄λ‘œμ €λŠ” 기본적으둜 ν•¨μˆ˜ λ‚΄λΆ€ scope μ•ˆμ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.  

μ΄λŠ” 기본적으둜 ν΄λ‘œμ €(non-escaping closure)λŠ” ν•¨μˆ˜λ₯Ό νƒˆμΆœν•  수 μ—†λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.  

즉, νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λœ ν΄λ‘œμ €λŠ” 첫번째 μ˜ˆμ‹œμ™€ 같이 μ§μ ‘ν˜ΈμΆœμ€ κ°€λŠ₯ν•˜μ§€λ§Œ,  

λ‘λ²ˆμ§Έ μ˜ˆμ‹œμ²˜λŸΌ μ™ΈλΆ€ λ³€μˆ˜λ‚˜ μƒμˆ˜μ— μ €μž₯ν•΄μ„œ ν•¨μˆ˜ ꡬ문 λ°– λ‹€λ₯Έ κ³³μ—μ„œ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€!   

 

λ˜ν•œ, νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λ˜λŠ” ν΄λ‘œμ €λŠ” ν•΄λ‹Ή ν•¨μˆ˜κ°€ λ¦¬ν„΄λ˜κΈ° 이전에 싀행이 λ©λ‹ˆλ‹€.  

즉, ν•¨μˆ˜κ°€ λ°˜ν™˜λ˜μ–΄ μ’…λ£Œλœ ν›„μ—λŠ” ν•΄λ‹Ή ν΄λ‘œμ €κ°€ 싀행될 수 μ—†λ‹€λŠ” λœ»μž…λ‹ˆλ‹€!  

 

이제 μœ„μ—μ„œ λ“€μ—ˆλ˜ 의문이 ν•΄κ²°λ˜μ‹œλ‚˜μš”?  νƒˆμΆœ κ°€λŠ₯ν•œ ν΄λ‘œμ €? μ–΄λ””λ₯Ό νƒˆμΆœν•œλ‹€λŠ”κ±°μ§€??  

ν•¨μˆ˜λ₯Ό νƒˆμΆœν•΄μ„œ ν•¨μˆ˜ ꡬ문 λ°–μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” ν΄λ‘œμ €κ°€ λ°”λ‘œ νƒˆμΆœ ν΄λ‘œμ €, Escaping Closure μž…λ‹ˆλ‹€!!  

 

νƒˆμΆœ ν΄λ‘œμ €μ˜ ν™œμš©

κ·Έλ ‡λ‹€λ©΄, νƒˆμΆœ ν΄λ‘œμ €λŠ” μ–΄λ–»κ²Œ μ‚¬μš©ν•˜κ³  μ–΄λ–€ μƒν™©μ—μ„œ ν™œμš©ν•  수 μžˆμ„κΉŒμš”??

이 λ˜ν•œ μ˜ˆμ‹œ μ½”λ“œλ‘œ μ•Œμ•„λ΄…μ‹œλ‹€!πŸ˜ŠπŸ˜‰

 

iOS κ°œλ°œμ„ ν•˜λ©° λ„€νŠΈμ›Œν¬ 톡신을 해보신 뢄듀이라면 μ•„λž˜μ™€ 같이 @escaping으둜 μ„ μ–Έλœ ν΄λ‘œμ €λ₯Ό 많이 보셨을거라고 μƒκ°ν•©λ‹ˆλ‹€!

 

 

μ΄λ ‡κ²Œ μ•žμ— @escaping이 뢙은 ν΄λ‘œμ €κ°€ Escaping Closure(νƒˆμΆœ ν΄λ‘œμ €)μž…λ‹ˆλ‹€.

 

μ•žμ—μ„œ μ—λŸ¬ λ©”μ‹œμ§€κ°€ λ–΄μ—ˆλ˜ μ˜ˆμ‹œ μ½”λ“œμ—μ„œλ„ Fixλ₯Ό ν΄λ¦­ν•˜λ©΄ μœ„μ™€ 같이 λ°”λ€ŒλŠ” 것을 확인할 수 μžˆλŠ”λ°μš”,

μ΄λ ‡κ²Œ ν΄λ‘œμ € μ•žμ— @escaping만 λΆ™μ—¬μ£Όλ©΄ ν΄λ‘œμ €λŠ” νƒˆμΆœ κ°€λŠ₯ν•œ μƒνƒœκ°€ λ©λ‹ˆλ‹€!

escaping closure λ§Œλ“œλŠ” 방법, 정말 쉽죠??

 

 

ν΄λ‘œμ €κ°€ ν•¨μˆ˜λ‘œλΆ€ν„° νƒˆμΆœ(escape)ν•œλ‹€λŠ” κ²ƒμ€ ν•΄λ‹Ή ν•¨μˆ˜μ˜ 인자둜 ν΄λ‘œμ €κ°€ μ „λ‹¬λ˜μ§€λ§Œ, ν•¨μˆ˜κ°€ λ°˜ν™˜λœ ν›„ μ‹€ν–‰λ˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

ν•¨μˆ˜μ˜ μΈμžκ°€ ν•¨μˆ˜μ˜ μ˜μ—­μ„ νƒˆμΆœν•˜μ—¬ ν•¨μˆ˜ λ°–μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” κ°œλ…μ€ 기쑴에 μš°λ¦¬κ°€ μ•Œκ³  있던 λ³€μˆ˜/μƒμˆ˜μ˜ scope(==λ²”μœ„, μ˜μ—­) κ°œλ…μ„ λ¬΄μ‹œν•©λ‹ˆλ‹€.

μ™œλƒν•˜λ©΄ ν•¨μˆ˜μ—μ„œ μ„ μ–Έλœ 둜컬 λ³€μˆ˜, μƒμˆ˜κ°€ 둜컬의 μ˜μ—­μ„ λ›°μ–΄λ„˜μ–΄ ν•¨μˆ˜ λ°–μ—μ„œλ„ μœ νš¨ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

λ”°λΌμ„œ, ν΄λ‘œμ €λ₯Ό νƒˆμΆœ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“€λ©΄ κ°€λŠ₯ν•œ 것은 크게 2가지 μž…λ‹ˆλ‹€.

1️⃣  ν΄λ‘œμ €λ₯Ό μ™ΈλΆ€ λ³€μˆ˜/μƒμˆ˜μ— μ €μž₯ κ°€λŠ₯ν•©λ‹ˆλ‹€.
2️⃣  ν•¨μˆ˜κ°€ λ°˜ν™˜λ˜μ–΄ μ’…λ£Œλœ 이후에도 ν΄λ‘œμ € 싀행이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

ν•¨μˆ˜ μ’…λ£Œ μ‹œ, λ‚΄λΆ€μ˜ ν΄λ‘œμ €λ„ 같이 λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œλ˜μ§€λ§Œ

@escaping을 μ΄μš©ν•΄ νƒˆμΆœ ν΄λ‘œμ €λ‘œ μ„ μ–Έν•  경우, ν•΄λ‹Ή ν΄λ‘œμ €λ§Œμ„ μœ„ν•΄ λ©”λͺ¨λ¦¬ 곡간을 λ§Œλ“€κ²Œ λ©λ‹ˆλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλ„ μ‚¬μš©μ΄ κ°€λŠ₯ν•œ κ²ƒμž…λ‹ˆλ‹€!

 

μœ„μ™€ 같은 νƒˆμΆœ ν΄λ‘œμ €μ˜ νŠΉμ§•μ€ μ„œλ²„ 톡신 μ‹œ, 비동기적 μ²˜λ¦¬κ°€ ν•„μš”ν•œ 경우 λ“± λ‹€μ–‘ν•œ μƒν™©μ—μ„œ μœ μš©ν•˜κ²Œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

μ„œλ²„ 톡신 μ‹œ νƒˆμΆœ ν΄λ‘œμ €λ₯Ό Completion Handler둜 μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ κ°€μž₯ λŒ€ν‘œμ μΈ ν™œμš© μ˜ˆμ‹œλΌκ³  μƒκ°ν•˜λŠ”λ°μš”!

μœ„μ˜ μ˜ˆμ‹œλ₯Ό λ‹€μ‹œ 가져와 μžμ„Ένžˆ μ„€λͺ…해보도둝 ν• κ²Œμš”!

 

 

μœ„μ˜ μ½”λ“œλŠ” moyaλΌλŠ” 톡신 라이브러리λ₯Ό μ΄μš©ν•΄ μž‘μ„±ν•œ API μ½”λ“œμΈλ°μš”!

κ²Œμ‹œκΈ€ 썸넀일 클릭 μ‹œ, 이 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ ν•΄λ‹Ή 포슀트의 상세 λ‚΄μš©μ„ μ‘°νšŒν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄ 톡신뢀λ₯Ό μ§œμ€€ κ²ƒμž…λ‹ˆλ‹€.

 

μ—¬κΈ°μ„œ Completion Handler둜 νƒˆμΆœ ν΄λ‘œμ €κ°€ μ‚¬μš©λ˜λŠ” 것을 보싀 수 μžˆλŠ”λ°μš”,

λ¨Όμ € Completion Handler에 λŒ€ν•΄ κ°„λ‹¨νžˆ μ„€λͺ…ν•˜κ³  λ„˜μ–΄κ°€μžλ©΄!

Completion HandlerλŠ” 'μ™„λ£Œ + λ‹΄λ‹Ήμž' 둜 직역할 수 μžˆλ“―μ΄ μ–΄λ– ν•œ 일이 끝났을 λ•Œ 진행할 업무λ₯Ό λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

νƒˆμΆœ ν΄λ‘œμ €λŠ” ν•¨μˆ˜ μ’…λ£Œ 이후에 싀행이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— Completion Handler둜 많이 μ‚¬μš©μ΄ λ˜λŠ”κ²ƒμ΄μ£ !!

 

μœ„μ˜ μ½”λ“œλ₯Ό λœ―μ–΄λ³΄μžλ©΄, μ„œλΉ„μŠ€ νŒŒμΌμ— μ •μ˜λœ getReviewPostDetailμ΄λΌλŠ” 톡신을 μš”μ²­ν•˜κ³  

ν†΅μ‹ μ˜ 결과물을 resultλΌλŠ” νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„ success, failure λΌλŠ” 각 μΌ€μ΄μŠ€μ— ν•΄λ‹Ήν•˜λŠ” 처리λ₯Ό ν•΄μ£Όκ³  μžˆμŠ΅λ‹ˆλ‹€.

μ΄λ•Œ, μ„œλ²„ 톡신을 μ„±κ³΅ν•˜κΈ°λ§Œ ν•˜λ©΄(statusCode에 상관없이) result값은 .successμž…λ‹ˆλ‹€.

즉, μ„œλ²„ 톡신 μžμ²΄μ— μ‹€νŒ¨ν–ˆμ„ 경우만 .failureκ°€ λ˜λŠ” 것이죠!

 

κ·Έλž˜μ„œ .success인 경우(==μ„œλ²„ 톡신에 μ„±κ³΅ν–ˆμ„ 경우), statusCode에 따라 세뢀적인 성곡 μ‹€νŒ¨ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

이λ₯Ό μœ„ν•΄μ„œ getReviewPostDetailJudgeData()λΌλŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

 

getReviewPostDetailJudgeData()μ—μ„œλŠ” μœ„μ™€ 같이 statusCode에 따라 NetWorkResultλ₯Ό λ°˜ν™˜ν•΄μ€λ‹ˆλ‹€.

μ΄λ•Œ, 성곡 μ‹œμ— decode된 dataλ₯Ό 같이 λ°˜ν™˜ν•΄μ£Όκ³  μžˆλŠ” 것을 ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μœ„μ˜ 톡신뢀 μ½”λ“œμ—μ„œ completion이 νƒˆμΆœ ν΄λ‘œμ €λ‘œ μ„ μ–Έλ˜μ–΄ 있기 λ•Œλ¬Έμ—

μ„œλ²„μ—μ„œ resultλ₯Ό λ°›μ•„μ˜€λŠ” μž‘μ—…μ΄ 끝났을 λ•Œ, 이λ₯Ό ν˜ΈμΆœν•˜λŠ” 것이 κ°€λŠ₯ν•œ κ²ƒμž…λ‹ˆλ‹€!

 

λ§Œμ•½, μ—¬κΈ°μ„œ νƒˆμΆœ ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•΄μ£Όμ§€ μ•ŠλŠ”λ‹€λ©΄?

μ„œλ²„ν†΅μ‹ μ΄ λλ‚˜λ©΄ ν•¨μˆ˜κ°€ μ’…λ£Œλ˜κΈ° λ•Œλ¬Έμ— μ΄λ ‡κ²Œ 세뢀적인 성곡 μ‹€νŒ¨ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•˜μ—¬ μ„œλ²„μ—μ„œ μ›ν•˜λŠ” 데이터λ₯Ό λ°›μ•„μ„œ μ²˜λ¦¬ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•΄μ§€κ²Œ λ©λ‹ˆλ‹€. 

 

이제 escaping closureλ₯Ό μ–΄λ–€ κ²½μš°μ— μ‚¬μš©ν•˜λŠ”μ§€, μ™œ μ‚¬μš©ν•˜λŠ”μ§€ 감이 μ’€ μž‘νžˆμ‹œλ‚˜μš”~?

 

μ΄λ ‡κ²Œ μ„œλ²„ 톡신 μ‹œ 뿐만 μ•„λ‹ˆλΌ,

비동기 μ²˜λ¦¬κ°€ ν•„μš”ν•œ κ²½μš°λ‚˜ ν•¨μˆ˜ μ’…λ£Œ μ§ν›„μ˜ 이벀트 처리λ₯Ό μœ„ν•΄ νƒˆμΆœ ν΄λ‘œμ €κ°€ 정말 많이 μ‚¬μš©λ˜λ‹ˆ

잘 이해해두면 정말 μœ μš©ν•  것 κ°™μŠ΅λ‹ˆλ‹€!

 


참고자료

https://i-colours-u.tistory.com/17?category=893082 

 

[Swift] escaping closureλž€? (νƒˆμΆœ ν΄λ‘œμ €)

μ—¬λŸ¬λΆ„λ“€μ€ ν˜Ήμ‹œ ν†΅μ‹ μ΄λ‚˜ 비동기 처리λ₯Ό ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ, μ΄λŸ°μ‹μœΌλ‘œ completion ν΄λ‘œμ €λ₯Ό νŒŒλΌλ―Έν„°λ‘œ μž‘μ„±ν•˜μ…¨μ§€ μ•Šλ‚˜μš”?! μ˜†μ— @escaping 이 λΆ™μ–΄μžˆλŠ” λͺ¨μŠ΅μ„ 확인 ν•  수 μžˆλŠ”λ°μš”. μ΄λ²ˆμ—

i-colours-u.tistory.com

https://dongminyoon.tistory.com/14

 

[SWIFT] Escaping Closure(νƒˆμΆœ ν΄λ‘œμ €)

ν΄λ‘œμ €μ˜ 기본에 λŒ€ν•΄ ν¬μŠ€νŒ…μ„ ν•œ 적이 μžˆμ—ˆλŠ”λ°μš”. μ΄λ²ˆμ—λŠ” ν΄λ‘œμ € ν™œμš©μ— λŒ€ν•΄ ν¬μŠ€νŒ…μ„ ν•΄λ³Όκ²Œμš”. 이전 ν¬μŠ€νŒ…μ„ μ•ˆλ³΄μ‹  뢄은 보고 μ˜€μ‹œλ©΄ 쒋을 것 κ°™μ•„μš”. [SWIFT] Closure(ν΄λ‘œμ €) (1/2) μ˜€λŠ˜μ€

dongminyoon.tistory.com

https://osoomoovo.tistory.com/175

 

[iOS/Swift] Closure에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

μ•„λž˜ 글듀을 μ°Έκ³ ν•˜λ©° μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€  - Closures  - Dive in Closure λ“€μ–΄κ°€λ©° ν΄λ‘œμ €λž€ 이λ₯Έλ°” 이름 μ—†λŠ” ν•¨μˆ˜, “읡λͺ… ν•¨μˆ˜"둜 λΆˆλ¦¬λŠ” μ½”λ“œλΈ”λŸ­μž…λ‹ˆλ‹€. 이번 κ²Œμ‹œκΈ€μ—μ„œλŠ” iOS κ°œλ°œμ„ ν•˜λ©° μ •~말정말

osoomoovo.tistory.com