๋ชฉ๋ก์ „์ฒด ๊ธ€ (67)

Focus On Develop ๐ŸคŸ๐ŸคŸ

[Swift] CodingKey

๋‹ค๋“ค Codable์€ ๋งŽ์ด ์‚ฌ์šฉํ•˜์‹œ์ฃ ~~~?? Codable์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๐Ÿ‘‰ ์—ฌ๊ธฐ์— ๊ฐ„๋‹จํžˆ ์š”์•ฝํ•˜๋ฉด ๋„คํŠธ์› ํ†ต์‹  ๋“ฑ์„ ํ†ตํ•ด ์™ธ๋ถ€์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ๋ฐ์ดํ„ฐ ํฌ๋งท์ด json์ด์ฃ !! ์ด jsonํŒŒ์ผ์„ ์•ฑ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋„๋ก Object๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ Decoding, ์•ฑ์˜ Object๋ฅผ jsonํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ Encoding ์ด๋ผ๊ณ  ํ–ˆ์—ˆ์ฃ ! ๊ทธ๋ฆฌ๊ณ  Encoding, Decoding ํ”„๋กœํ† ์ฝœ์„ ๋‘˜ ๋‹ค ํฌํ•จํ•˜๋Š”๊ฒŒ Codable ํ”„๋กœํ† ์ฝœ์ด์—ˆ์Šต๋‹ˆ๋‹ค ๐ŸคŸ Codable ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด Encoding, Decoding์€ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํ›Œ ํ›Œ ์ง€๋‚˜๊ฐ‘๋‹ˆ๋‹ค!! ์—ฌ๊ธฐ ๊ผญ ๋ณด๊ณ ์˜ค์„ธ์š”๐Ÿ‘ Codable์€ Swift์—์„œ ๊ต‰์žฅํžˆ ๊ฐ•๋ ฅํ•œ! ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ์€ ๋งž์Šต๋‹ˆ๋‹ค๋งŒ,,,, ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์™ธ๋ถ€์˜..

[XCode] Github & Bitrise ์—ฐ๋™ํ•˜๊ธฐ

๋‹ค๋“ค ํ˜‘์—…์„ ์œ„ํ•ด ์†Œ์Šค๊ด€๋ฆฌ ํ•˜์‹œ์ฃ ~~? (Git, Github ๋“ฑ๋“ฑ ์‚ฌ์šฉํ•˜์‹ค๊ฑฐ์—์š”!) ๋ธŒ๋žœ์น˜๋”ฐ์„œ ์ž‘์—…ํ•˜๊ณ  ์ปค๋ฐ‹, ํ‘ธ์‰ฌํ• ๋•Œ! ํ˜น์‹œ๋‚˜ ๋ญ”๊ฐ€ ๋‚ด๊ฐ€ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•œ ๋นŒ๋“œ ์—๋Ÿฌ๋ฅผ ํƒ์ง€ํ•ด์ฃผ๋Š”๊ฒŒ ์žˆ๋‹ค๋ฉด ์ข‹๊ฒ ์ฃ ..!? ๊ทธ๊ฒŒ ๋ฐ”๋กœ Bitrise๋ผ๋Š” ๋…€์„์ด์—์š”! Github๊ณผ Bitrise๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ๊ฒŒ์š”! ๐Ÿ˜Ž ์ด ํฌ์ŠคํŒ…์€ iOS App๊ฐœ๋ฐœํˆด์ธ XCode ํ”„๋กœ์ ํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌ์„ฑํ•ด๋ณผ๊ฑฐ์—์š”. ๋กœ์ปฌ Repository์—์„œ ๋ญ”๊ฐ€ ์ž‘์—…ํ•˜๊ณ , ์›๊ฒฉ Repository์— Commit, Push ํ•˜๊ณ ๋‚˜๋ฉด ์ž๋™์œผ๋กœ Bitrise๊ฐ€ Push๋œ ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ๊ฐ€์„œ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ•œ๋‹ต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์–ด๋–ค ์ด์œ ์—์„œ ๋นŒ๋“œ๋ฅผ ์‹คํŒจํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฒŒ์— Noti๋ฅผ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค! ์‹œ์ž‘ํ•ด๋ณผ๊ฒŒ์š”! ๐Ÿ‘‰ 1. Github Repos..

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ”„๋ฆฐํ„ฐ

์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€(์ตœ๋Œ“๊ฐ’) ์ธ์‡„๋ฌผ์„ ์ฐพ๊ณ , ๊ทธ๊ฒŒ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•œ ์ธ์‡„๋ฌผ๊ณผ ๋™์ผํ•˜๋‹ค๋ฉด ๋ช‡๋ฒˆ์งธ๋กœ ์ถœ๋ ฅ๋˜์—ˆ๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค. ์ฆ‰ ์šฐ์„ ์ˆœ์œ„๋งŒ ๋†’๋‹ค๊ณ  ๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์šฐ์„ ์ˆœ์œ„์™€ ์ธ์‡„๋ฌผ๋ฒˆํ˜ธ๋ฅผ ์Œ์œผ๋กœ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ํŠœํ”Œ๋กœ (์ธ์‡„๋ฌผ์œ„์น˜, ์šฐ์„ ์ˆœ์œ„)๋ฅผ ๊ฐ€์ง€๊ณ  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“  ๋‹ค์Œ, ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ๋Œ€๋กœ ๊ฐ€์žฅ ์•ž์˜ ์ธ์‡„๋ฌผ์ด ์ถœ๋ ฅํ•  ์ˆœ์„œ์ธ์ง€ ํ™•์ธํ•˜๊ณ , ๋งž๋‹ค๋ฉด ์ด๊ฒŒ ์š”๊ตฌํ–ˆ๋˜ ์ธ์‡„๋ฌผ๋ฒˆํ˜ธ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ•œ๋ฒˆ๋” ๊ฒ€์ฆํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๊ณ , ์ผ์น˜ํ•˜๋ฉด ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. func solution(_ priorities:[Int], _ location:Int) -> Int { var printArray: [(Int, Int)] = [] var res = 1 for (i, x) in priorities.enumerated(..

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„

ใ…‹ใ…‹ ๋ฌธ์ œ๊ฐ€ ๋”๊ธธ๋‹ค.๐Ÿ˜‚ ๋ฌธ์ œ์—์„œ ์‹œํ‚ค๋Š”๋Œ€๋กœ ํฌ๋ ˆ์ธ์˜ ์œ„์น˜๋ฅผ ์ฐพ๊ณ , ํฌ๋ ˆ์ธ์„ ์ญ‰ ๋‚ด๋ ธ์„๋•Œ ์ง‘์„ ์ธํ˜•์ด ์žˆ๋‹ค๋ฉด ๋ฐ”๊ตฌ๋‹ˆ์— ์˜ฎ๊ฒจ์„œ ์ œ์ผ ์œ„์—์žˆ๋Š” ์ธํ˜•๊ณผ ๊ฐ™์€ ์ธํ˜•์ด๋ฉด ๋‘๊ฐœ๋ฅผ ํ„ฐํŠธ๋ฆฌ๋ฉด ๋œ๋‹ค. ๊ทผ๋ฐ ๋ฌธ์ œ๋Š”.. ์ฃผ์–ด์ง€๋Š” board๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ธํ˜•์„ ์ง‘์–ด์˜ฌ๋•Œ๋‚˜, ํ•ด๋‹น ๋ผ์ธ์ด ๋น„์–ด์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๊ธฐ๊ฐ€ ์ข€ ์• ๋งคํ•ด์ง„๋‹ค. board[ํ–‰][์—ด]๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๊ธฐ๊ฐ€ ์ข€.. ๐Ÿ˜ญ ๊ทธ๋ž˜์„œ ๋‚˜๋Š” board๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ๋ณด๊ธฐ์œ„ํ•ด ์กฐ๊ธˆ ํšŒ์ „์‹œ์ผœ์„œ ์ƒˆ๋กœ์šด dolls๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ๋Œ๋ฆฌ๋ฉด, ํ•ด๋‹น๋ผ์ธ์ด ๋น„์—ˆ๋Š”์ง€์™€ ์ œ์ผ ์œ„์—์žˆ๋Š” ์ธํ˜•์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์ˆ˜์›”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค! func solution(_ board:[[Int]], _ moves:[Int]) -> Int { var dolls = Array(repeating: Array(..

[Swift] Cloud Firestore(2) ์‹ค์Šตํ•ด๋ณด๊ธฐ

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ Cloud Firestore์— ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๋Š”์ง€ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ์š”~!! ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ž˜ ๋ชจ๋ฅด๋ฉด ๋จผ์ € ๊ตฌ์กฐ๋ถ€ํ„ฐ ํ™•์‹คํ•˜๊ฒŒ ์•Œ๊ณ  ์‹ค์Šต์„ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค ๐Ÿ‘๐Ÿ‘ ๐Ÿ‘‰ 2021/02/08 - [iOS [Swift]/๊ธฐ์ดˆ๋ฅผ ํƒ„ํƒ„ํžˆ!] - [Swift] Cloud Firestore(1) ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ด๋ฒˆ์—๋Š” ์‹ค์ œ๋กœ XCode์—์„œ ์–ด๋–ป๊ฒŒ Firestore๋ฅผ ํ†ตํ•ด CURD๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹ค์Šตํ•ด๋ณผ๊ฑฐ์—์š”. ๋จผ์ € ์‹ค์Šต์„ ์œ„ํ•ด์„œ, Firestore๋ฅผ ๋น„์–ด์žˆ๊ฒŒ ์ค€๋น„ํ•˜๊ณ , Console์„ ๋ฐ”๋กœ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›Œ์ค์‹œ๋‹ค! Database ์ฐธ์กฐ ๋ณธ๊ฒฉ CRUD ์‹ค์Šต์— ์•ž์„œ, ์šฐ๋ฆฌ๊ฐ€ Cloud์˜ Firestore์ด ์–ด๋””์žˆ๋Š”์ง€ ์œ„์น˜์ •๋ณด๋ฅผ ์•Œ์•„์•ผ CRUD๋ฅผ ์ง„ํ–‰ํ•˜๊ฒ ์ฃ ~? ์•„๋ž˜ ์ฝ”๋“œ๋กœ..

[Swift] Cloud Firestore(1) ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

์˜ค๋Š˜์€ Google Firebase Cloud Firestore์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ์š”๊ธฐ ๋“ค์–ด๊ฐ€์„œ ๊ตฌ๊ธ€๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๊ณ  ๋‘˜๋Ÿฌ๋ณด์‹œ๊ธธ!! ใ…Žใ…Žใ…Ž console.firebase.google.com/ ๋กœ๊ทธ์ธ - Google ๊ณ„์ • ํ•˜๋‚˜์˜ ๊ณ„์ •์œผ๋กœ ๋ชจ๋“  Google ์„œ๋น„์Šค๋ฅผ Google ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ accounts.google.com ์šฐ๋ฆฌ๊ฐ€ ์•ฑ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๋กœ์ปฌ ์ €์žฅ์†Œ์ธ UserDefault, CoreData๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ์ œ์™ธํ•˜๊ณ , ๋ถ„๋ช…ํžˆ ์›๊ฒฉ Database๊ฐ€ ํ•„์š”ํ•˜๊ฒ ์ฃ ? ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์นด์นด์˜คํ†ก ์ฑ„ํŒ…์ด๋‚˜, ๊ณต์œ ๋ฌธ์„œํ•จ ๋“ฑ์„ ์‚ฌ์šฉ์ž A์™€ B๊ฐ€ ์„œ๋กœ ๋™๊ธฐํ™”๋˜๋Š” ์•ฑํ™”๋ฉด์„ ๋ด์•ผํ•œ๋‹ค๋ฉด, ๋กœ์ปฌ ์ €์žฅ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ถ„๋ช…ํžˆ ๋ถ€์กฑํ•˜๊ฒ ์ฃ ! A๊ฐ€ ์ฑ„ํŒ…์„ ๋ณด๋‚ด๋ฉด ์–ด๋”˜๊ฐ€ Database์— ๋‚ด์šฉ์ด ์ €์žฅ๋˜..

[Swift] ScrollView + PageControl

Storyboard์— ๋ณด๋ฉด pageControl์ด ์žˆ๋Š”๋ฐ, ๊ทธ๊ฒƒ๋งŒ ๋„ฃ์œผ๋ฉด ์ž๋™์œผ๋กœ ์ขŒ/์šฐ๋กœ swipeํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋‚˜?? ์‹ถ์—ˆ๋Š”๋ฐ.. ์•„๋‹ˆ๋”๋ผ๊ตฌ์š” ใ…Žใ…Žใ…Ž ์Œ.. ๊ทธ๋Ÿผ ์ด๊ฑฐ๋Š” ์–ด๋–ป๊ฒŒ ์“ฐ๋Š”๊ฑฐ์ง€? ํ•˜๋‹ค๊ฐ€ Tutorial Sample์„ ๋งŒ๋“ค์–ด๋ดค์–ด์š”~ ScrollView + PageControl์ด๋‚˜, CollectionView + PageControl์„ ๋งŽ์ด ์“ฐ๋Š” ๊ฒƒ ๊ฐ™๋”๋ผ๊ตฌ์š”. ๊ทธ ์ค‘์— ScrollView๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. Storyboard๋Š” ๊ฐ„๋‹จํžˆ ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ–ˆ์–ด์š”. ScrollView ์•ˆ์— View๋ฅผ ๋„ฃ๊ณ  Constraint๋ฅผ ๋งž์ถœ๋•Œ๋Š” ๋ญ”๊ฐ€ ์—๋Ÿฌ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ–ˆ์—ˆ์ฃ ?ใ…‹ใ…‹ ์ด๋ฒˆ์—๋Š” ๋”ฐ๋กœ ๋ฐ์ดํ„ฐ ์—†์ด ๋ทฐ๋งŒ ๋”ฑ ์žก์•„์ฃผ๊ธฐ!! ์ž ๊น ํ‹ˆ์ƒˆ๋กœ ์—ฌ๊ธฐ์„œ ScrollView์— View๋ฅผ ๋„ฃ์„๋•Œ Constra..

[Swift] CGRect, CGSize, CGPoint

๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด ํ• ์ˆ˜๋ก Interface Builder ๋กœ๋งŒ UI์ž‘์—…์„ ํ•˜๋Š”๊ฒŒ ํ•œ๊ณ„๊ฐ€ ์žˆ๋”๋ผ๊ตฌ์š”! ๐Ÿ‘‰ Storyboard vs Programmatic UI ๋ฐ”๋กœ๋ณด๊ธฐ ๊ทธ๋ž˜์„œ ์ €๋Š” Programmatically AutoLayout์— ์ž…๋ฌธํ–ˆ์Šต๋‹ˆ๋‹ค!! ์ด๋Ÿฐ ์ €๋Ÿฐ ์†Œ์Šค๋ฅผ ๋ณด๋ฉด CG ์–ด์ฉŒ๊ตฌ ์ €์ฉŒ๊ตฌ..๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ๋‚ด๊ฐ€ ์•„๋Š” CG๋Š” ์˜ํ™”๋ณด๋ฉด์„œ "์—์ด~์ €๊ฑฐ CG๋„ค" ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ๋ฟ์ธ๋ฐ..๐Ÿ˜‚๐Ÿ˜‚ ๊ทธ๋ž˜์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ธฐ์ดˆ์ ์ธ ๊ฒƒ๋ถ€ํ„ฐ ์ •๋ฆฌํ•ด๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!! ๋จผ์ €, CG CG ํ•˜๋Š”๋ฐ CG๊ฐ€ ๋ญ˜๊นŒ์š”~? ๊ทธ๋ ‡๋Œ€์š”. ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด Swift์—์„œ 2์ฐจ์›์ƒ์˜ ํ™”๋ฉด์„ ๊ทธ๋ฆด๋•Œ ์‚ฌ์šฉํ•˜๋Š” Framework๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ๋งŽ์ด ๋“ค์–ด๋ณธ CGFloat, CGPoint, CGSize, CGRect, CGColor, CGFont ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ์š”์†Œ๊ฐ€ ์š” Fra..