๐ŸŽ iOS/Swift

[Swift] Escaping Closure(ํƒˆ์ถœ ํด๋กœ์ €)

janechoi 2022. 2. 21. 03:22

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ํด๋กœ์ €(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