๊ฐœ๋ฐœ ๊ฒฝํ—˜์ผ์ง€

[Swift] ์ž˜๋ชป๋œ JSON ๊ตฌ์กฐ ํŒŒ์‹ฑ ํ•ด๋ณด๊ธฐ

๊ธฐ๊ฐ€์ •ํ›ˆ 2023. 2. 25. 01:43

 

๐Ÿ“š ์ˆ˜์—… ์‹œ๊ฐ„์— API ๋„คํŠธ์›Œํ‚น ๊ตฌ์กฐ ์‹ค์Šต์„ ํ•˜๋ฉด์„œ ๋ฐœ๊ฒฌํ•œ ํŠธ๋Ÿฌ๋ธ”์ด๋‹ค!!

 


๋ฌธ์ œ

๋ฌธ์ œ์˜ Json ๊ตฌ์กฐ ๐Ÿ˜ซ

์ฒ˜์Œ์—๋Š” ์ด์ƒํ•˜๋‹ค๊ณ  ๋Š๋ผ์ง€ ๋ชปํ–ˆ๋‹ค... ์™œ๋ƒํ•˜๋ฉด ๊ธฐ๊ด€์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋Š” API์ด๊ณ  ์ฝ”๋“œ ์ƒ์—์„œ ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค.

 

์›์ธ

์ด์ƒํ•จ์„ ๋Š๊ปด ๊ณ„์† ๋šซ์–ด์ ธ๋ผ ๋ณด๋‹ˆ ๋‚ด๊ฐ€ ์„ฑ๊ณตํ•œ ๋‰ด์Šค API ์‘๋‹ต JSON ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ฆด ์ˆ˜ ์žˆ์—ˆ๋‹ค.๐Ÿ˜ค

 

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

์–ด๋–ป๊ฒŒ ๋นผ๋‚ผ์ง€ 1์‹œ๊ฐ„ ์ •๋„ ๊ณ ๋ฏผํ•˜๊ณ  ์‹œ๋„ํ•ด ๋ณด๋‹ค๊ฐ€ ๊ฐ•์‚ฌ๋‹˜๊ป˜ ์งˆ๋ฌธ์„ ํ–ˆ๋‹ค.
๊ฐ•์‚ฌ๋‹˜์˜ ๋‹ต๋ณ€ ์—ญ์‹œ JSON ๊ตฌ์กฐ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๊ณ  2๋ฒˆ ์ค„์˜ key ๊ฐ’์ด ์—†์–ด ์ด๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ์—๋Š” ์ฝ”๋“œ๊ฐ€ ๋”๋Ÿฌ์›Œ์ง€๊ณ  ํž˜๋“ค๋‹ค๊ณ  ์กฐ์–ธ์„ ํ•ด์ฃผ์…จ๋‹ค.
๋จผ ๊ธธ์„ ๋Œ์•„๊ฐ€์•ผ ํ•œ๋‹ค! ๐Ÿค”
๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ ํ•ด๊ฒฐ์ ์„ ํžŒํŠธ๋ฅผ ๋˜์ ธ ์ฃผ์…จ๋‹ค.

์ฒ˜์Œ ๋ [ ]๋งŒ ์ œ๊ฑฐํ•˜๋ฉด ์›ํ•˜๋Š” ์‹ค์Šต์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ง์”€ํ•ด ์ฃผ์…จ๋‹ค.

 

์ž˜๋ชป๋œ API ์‹ค์Šต์€ ํŒ€์›๋“ค๊ณผ ๊ฐ™์ด ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ณ  ์žˆ์–ด ์–ด๋–ป๊ฒŒ [ ] ์ œ๊ฑฐํ• ์ง€ ์•„์ด๋””์–ด๋ฅผ ๋‚ด๋ฉด์„œ ์ฝ”๋”ฉ์„ ํ–ˆ๋‹ค.

 

๋ฐ›์•„์˜จ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ ํ›„
removeFirst() , removeLast()์„ ์ด์šฉํ•˜์—ฌ [ ]์„ ์ œ๊ฑฐํ–ˆ๋‹ค.
์—ฌ๊ธฐ์„œ ๋ง‰ํžŒ ๋ถ€๋ถ„์€ ์ง€๊ธˆ์€ ๋ฌธ์ž์—ด์ด์–ด์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋‹ค์‹œ data ํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ๊ณ  decode ํ•˜๋Š” ์ž‘์—…์„ ํ•˜์ง€?๋ผ๋Š” ๋ฒฝ์— ๊ฐ€๋กœ๋ง‰ํ˜”๋‹ค.

 

๋‚ด๊ฐ€ ์ œ์‹œํ•œ ๋ฌธ์ž์—ด ๊ฐ’์„ decode ๋ฐ˜๋Œ€์ธ encode๋ฅผ ํ•œ ํ›„ retrurn ํ•˜๊ธฐ ์œ„ํ•ด decode๋ฅผ ํ•ด๋ณด์ž๊ณ  ํ–ˆ๋‹ค.
์˜ค๋Š˜ ์ˆ˜์—… ๋งˆ๋ฌด๋ฆฌ ์‹œ๊ฐ„์ด ๋‹ค๊ฐ€์™€ ์–ด๋–ป๊ฒŒ ํ•ด๋ณผ์ง€ ์„œ๋กœ ์ด์•ผ๊ธฐ๋งŒ ํ•ด๋ณด๊ณ  ๋งˆ๋ฌด๋ฆฌ๋ฅผ ์œ„ํ•ด ์ด ์ž‘์—…์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋’ค๋กœ ๋ฏธ๋ฃจ์—ˆ๋‹ค.

 

์ˆ˜์—…์ด ๋๋‚œ ํ›„ ํ˜ผ์ž์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์‹œ๋„๋ฅผ ํ•ด๋ดค๋‹ค.
ํ•จ์ˆ˜ ์ฒ˜์Œ ์‹คํ–‰ ์ชฝ ๋ถ€๋ถ„, ๋ทฐ๊ฐ€ ๋กœ๋“œ๋˜๋Š” ์ชฝ, ๊ฐ’์ด ์ „๋‹ฌ๋˜๋Š” ์ชฝ ๋“ฑ๋“ฑ
์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด print ๋ฌธ์„ ์ฐ์œผ๋ฉด์„œ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ํ™•์ธํ•ด ๋ณด๊ณ  ์žˆ์—ˆ๋‹ค.
๊ณ„์† ํ„ฐ๋ฏธ๋„ ์ฐฝ์— ๊ฐ’์ด ์•ˆ ๋œจ์ž ๋ฌด์—‡์ด ๋ฌธ์ œ์ธ์ง€ ํ—ท๊ฐˆ๋ ธ๋‹ค. ์–ด๋Š ์ •๋„ ์‚ฝ์งˆํ•œ ๊ฒฐ๊ณผ ๋‚ด๊ฐ€ ์ณ๋‹ค๋ณด๊ณ  ์žˆ์—ˆ๋˜ ์ฐฝ์€ ํ„ฐ๋ฏธ๋„์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ฐฝ์ด์—ˆ๋‹ค…. ์•„….??? ๐Ÿ˜ก

์ž๋‚˜๊บ ๋‚˜ ์„ธํŒ… ์กฐ์‹ฌ

๊นจ๋‹ซ๊ณ  ๋‹ค์‹œ ์—ด์‹ฌํžˆ print๋ฌธ์„ ํ™•์ธํ•˜๋ฉด์„œ ์–ด๋”” ๋ถ€๋ถ„์ด ๋ฌธ์ œ์ธ์ง€ ํŒŒ์•…ํ–ˆ๋‹ค.

 

let food ์ชฝ ๋ถ€๋ถ„์ด ๋ฌธ์ œ์˜€๋‹ค.
data! ํ•˜๋ฉด ๊ฐ’์ด ๋‚˜์˜ค๋Š”๋ฐ decode ์ชฝ ๋ถ€๋ถ„์ด ๋ฌธ์ œ์˜€๋‹ค.
๊ทธ๋ž˜์„œ ์˜ต์…”๋„ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์žˆ์–ด์„œ ๊ทธ๋Ÿฐ๊ฐ€ ํ•˜๊ณ  ๋ฐ”์ธ๋”ฉ์„ ํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ
if let , guard ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ”์ธ๋”ฉ์„ ํ’€์–ด์ฃผ๋ฉด if ๋ฌธ์•ˆ์—์„œ๋งŒ ์‚ด์•„์žˆ๋Š” ์กฐ๊ฑด ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— if ๋ช…๋ น์ด ๋๋‚˜๊ณ ๋Š” ๋‹ค์‹œ ์˜ต์…”๋„? ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด let food ์ชฝ ๋ถ€๋ถ„์— from: data๋กœ ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ์ง€ ๋ชปํ–ˆ๋‹ค. -> โ€ป ์ €์˜ ๋‡Œํ”ผ์…œ์ž…๋‹ˆ๋‹ค..ใ…Ž
๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ํ•˜์ง€ ๋˜ ์‚ฝ์งˆ์„ ์‹œ์ž‘ํ–ˆ๋‹ค ์ด๋ ‡๊ฒŒ ํ•ด๋ณด๊ณ  ์ €๋ ‡๊ฒŒ ํ•ด๋ณด๊ณ  ์ •๋‹ต์ด ๋‚˜์˜ฌ ๊ฑฐ ๊ฐ™์ง€ ์•Š์ž
๊ตฌ๊ธ€์— ๊ทธ๋ƒฅ ์ƒ๊ฐ๋‚ฌ๋˜ ๋‹จ์–ด์ธ swift decode nil ์ด๋ ‡๊ฒŒ ์น˜๊ณ  ์ฒ˜์Œ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์ •๋ณด๋ฅผ ์–ป์œผ๋ ค๊ณ  ํ–ˆ๋‹ค..!

 

 

[Swift] enum์— ์ •์˜๋˜์ง€ ์•Š์€ ๊ฐ’์œผ๋กœ ๋””์ฝ”๋”ฉ์„ ์‹œ๋„ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

Decoding enum with invalid value

sujinnaljin.medium.com

๊ฒ€์ƒ‰์„ ์ž๋ฃŒ๋ฅผ ์‘ฅ์‘ฅ ๋ณด๋‹ค๊ฐ€ ๋‚˜์˜ ๋ˆˆ์—๋Š” jsonString ์ชฝ์ด ํฌ์ฐฉ๋˜์—ˆ๋‹ค.

์–ด ์ด๊ฑฐ ์ต์ˆ™ํ•œ ๋ง›์ธ๋ฐ? ๐Ÿ˜ฒ

Optional("{\"resultList\":[{\"contentSeq\":16,\"areaName\":\"์ถ˜์ฒœ์‹œ\",\"partName\"
:\"์‹์Œ๋ฃŒ\",\"title\":\"์‚ฌ๋†๋™334\",\"address\":\"๊ฐ•์›๋„ ์ถ˜์ฒœ์‹œ ์˜์„œ๋กœ 2949-13\",\"latitu
de\":\"37.9152543465461\",\"longitude\":\"127.720272370027\",\"tel\":\"010-9973-3
836\"},{\"contentSeq\":20,\"areaName\":\"์ถ˜์ฒœ์‹œ\",\"partName\":\"์‹์Œ๋ฃŒ\",\"title\":
\"์–ด๋ฐ˜๊ทธ๋ฆฐ\",\"address\":\"๊ฐ•์›๋„ ์ถ˜์ฒœ์‹œ ์„œ๋ฉด ๋ฐ•์‚ฌ๋กœ 732\",\"latitude\":\"37.8843707666682
\",\"longitude\":\"127.683178984882\",\"tel\

์ฐพ์•˜๋‹ค ์š”๋†ˆ

๋น™๊ณ  ใ…‹ใ…‹ใ…‹ ํŒ€์›๋“ค์ด๋ž‘ ๊ฐ™์ด ํ•ด๋ณด๊ณ  print ๋ฌธ ์ฐ์€ dataToString์ด๋ผ๊ณ  [ ]๋งŒ ์ œ๊ฑฐํ–ˆ๋˜ ๊ทธ๊ฑฐ์˜€๋‹ค.
์˜ค ๋น„์Šทํ•˜๋‹ค ๋˜ ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์— decode๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ด๋Ÿฐ ๋ฌธ์ž์—ด์„ ๋„ฃ์–ด์คฌ๋„น?
๋˜‘๊ฐ™์ด ์ ์–ด๋ดค๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐœ์˜ ์˜ต์…”๋„? ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ณ  ์‹คํ–‰ํ–ˆ๋”๋‹ˆ ๋งค์šฐ ๋งค์šฐ ์ž˜ ๋‚˜์™”๋‹ค. ํ•ด๊ฒฐ ์™„๋ฃŒ!

 

๊ทธ๋ž˜์„œ ์ตœ์ข… ์ฝ”๋“œ์ด๋‹ค..!

์ฐ๋ง‰ ์ฝ”๋“œ!


๋Š๋‚€ ์ 

์ด์ œ ์ˆ™์ œ ๊ฑฐ๋ฆฌ์ธ ๊ณต๋ถ€ํ•ด์•ผ ํ•  ๊ฒƒ์€..๐Ÿ˜ฅ

1. ์œ„์— ์žˆ๋Š” ๋ธ”๋กœ๊ทธ ๋‚ด์šฉ ๋‹ค์‹œ ์ดํ•ดํ•ด ๋ณด๊ธฐ

2. swift ์—๋Ÿฌ ์ƒํ™ฉ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๊ณต๋ถ€

 

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด ๋‹คํ–‰์ด์—ˆ๋‹ค. ์ข‹์€ ์‹œ๋„์˜€๋˜ ๊ฑฐ ๊ฐ™๋‹ค..!
ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ธ”๋กœ๊ทธ ๊ธ€ ์˜ฌ๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

 


์•„๋ž˜์˜ ์ฃผ์†Œ๋Š” ์‹ค์Šตํ•œ ๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค ๐Ÿ‘๐Ÿ‘

https://github.com/APPSCHOOL1-REPO/fetchDataDemo-20221123_lab09