๋ชฉ๋กiOS [Swift] (55)

Focus On Develop ๐ŸคŸ๐ŸคŸ

[Swift] Realm ํŒŒ์ผ ๊ฒฝ๋กœํ™•์ธ

์•ˆ๋…•ํ•˜์„ธ์š”~~~๐Ÿ‘‹ ์ง„์งœ ์ง„์งœ ์˜ค๋žœ๋งŒ์— ๊ธ€์„ ์“ฐ๋Š” ๊ฒƒ ๊ฐ™์•„์š” ใ…Žใ…Žใ…Žใ…Ž ์˜ค๋žœ๋งŒ์— ๊ธ€์„ ์“ฐ๋ ค๋‹ˆ ๋ฌด์Šจ ๋‚ด์šฉ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์จ์•ผํ• ์ง€๋„ ๋ชจ๋ฅด๊ฒ ์–ด์š”!! ๊ณต๋ถ€ํ•˜๊ณ  ๊ฐœ๋ฐœํ•ด์˜ค๋ฉด์„œ ๋‚˜์ค‘์— ์ด๋Ÿฐ ๋‚ด์šฉ๋„ ์จ์•ผ๊ฒ ๋‹ค~ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค~ ํ–ˆ๋Š”๋ฐ ์Œ“์ด๋‹ค๊ฐ€ ์žŠํ˜€์กŒ์–ด์š”..... ๊ทธ๋ž˜๋„ ๋‹ค์‹œ ๋งˆ์Œ์„ ์žก๊ณ  ๊ธฐ์–ต์„ ๋”๋“ฌ์–ด ์ฐจ๊ทผ์ฐจ๊ทผ ์“ฐ๋ ค๊ณ  ํ•ด๋ณผ๊ฑฐ์—์š”! ๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ ๊ฐ„๋‹จํ•œ ๋‚ด์šฉ๋ถ€ํ„ฐ ์ •๋ฆฌํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ์–ด์š”! ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋ฉด ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ํ…๋ฐ, ์„œ๋ฒ„์— ์ €์žฅ์„ ํ•  ์ˆ˜๋„, ๋กœ์ปฌ์— ์ €์žฅ์„ ํ•  ์ˆ˜๋„ ์žˆ์ฃ ? ๋กœ์ปฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ• ์ค‘์—์„œ๋„ Realm์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ ์š”! (TMI) Realm์„ ๋ ๋ฆ„, ๋ ˜ ์–ด๋–ป๊ฒŒ ์ฝ์–ด์•ผ ํ•˜๋Š”์ง€ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ.. Realm ๊ฐœ๋ฐœ ๋‹ด๋‹น์ž๊ฐ€ "๋ ˜" ์ด๋ผ๊ณ  ์ฝ์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๊ณ ์š”! ์ „ํ•ด ๋“ค์€ ์ด์•ผ๊ธฐ์—์š”..

[Swift] UITextField ํ•œ๊ธ€ ๊ธ€์ž์ˆ˜ ์ œํ•œ

์ด๋ฒˆ ํฌ์ŠคํŒ…์€ UITextField์— ํ•œ๊ธ€์ž…๋ ฅ์‹œ ๊ธ€์ž์ˆ˜ ์ œํ•œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค! ์ด๋ฒˆ์— ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๊ธ€์ž์ˆ˜ ์ œํ•œ์ด ์žˆ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ๋„ฃ๊ฒŒ ๋๋Š”๋ฐ, ์˜์–ด๋‚˜ ์ด๋ชจ์ง€๋กœ๋Š” ๊ธ€์ž์ˆ˜ ์ œํ•œ์ด ์ž˜ ๋™์ž‘ํ–ˆ๋Š”๋ฐ, ํ•œ๊ธ€ ์ž…๋ ฅ์‹œ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋”๋ผ๊ตฌ์š” ๐Ÿ˜ญ ์˜ˆ๋ฅผ๋“ค๋ฉด 5์ž ์ œํ•œ์ด๋ผ๊ณ  ํ• ๋•Œ "๊ฐ€๋‚˜๋‹ค๋ผใ…" ์ด๋ ‡๊ฒŒ "ใ…"๋ฅผ ์น˜์ง€ ๋ชปํ•˜๊ฒŒ ๋˜๊ฑฐ๋‚˜, "๊ฐ€๋‚˜๋‹ค๋ผ๋ง˜"์„ ์น˜๊ณ  ์‹ถ์€๋ฐ "๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ"+"ใ…"์ด ์ž…๋ ฅ์ด ์•ˆ๋˜๊ฑฐ๋‚˜, "๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ"์—์„œ ๊ณ„์† ํƒ€์ดํ•‘์‹œ "๋งˆ" ๋ถ€๋ถ„์— ํƒ€์ดํ•‘ํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๊ณ„์† ์ž…๋ ฅ๋˜๊ฑฐ๋‚˜ ใ… ใ…  ๊ทธ๋ž˜์„œ ๊ฒช์—ˆ๋˜ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ์ •๋ฆฌํ•˜๋ฉด์„œ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•์„ ์ž‘์„ฑํ•ด๋‘๋ ค๊ณ  ํ•ด์š”!! ์•„๋งˆ ์ด ๊ธ€์€ ๋น„์ธ๊ธฐ ๊ธ€์ด๋ผ์„œ ใ…Žใ…Ž ๋ˆ„๊ตฌ์—๊ฒŒ ๋…ธ์ถœ์ด ๋ ์ง€ ์‚ฌ์‹ค ์ž˜๋ชจ๋ฅด๊ฒ ์ง€๋งŒ.. ์ด๊นŒ์ง€ ์˜ค์…จ๋‹ค๋ฉด ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ๋ณธ์  ๋งŽ์œผ์‹ค๊ฑฐ์—์š”! ๊ตฌ๊ธ€๋งํ•ด๋ณด๋ฉด TextFi..

[Swift] Error Handling

์ด๋ฒˆ์—๋Š” ์ •๋ง ์˜ค๋žœ๋งŒ์— ๊ธ€์„ ์“ฐ๋„ค์š”~~ ใ…Žใ…Ž ๊ทธ๋™์•ˆ ์žˆ์—ˆ๋˜ Big Event๋Š” ์†Œ์†Œํ•œ ์ผ์ƒ ๋ธ”๋กœ๊ทธ์— ํฌ์ŠคํŒ…ํ•˜๋‹ˆ ๊ถ๊ธˆํ•˜์‹  ๋ถ„(?)์€ ๋†€๋Ÿฌ์˜ค์„ธ์š”~!! ๐Ÿ™ ์˜ค๋Š˜์€ Swift์—์„œ Error๋ฅผ ์–ด๋–ป๊ฒŒ Handlingํ•˜๋ฉด ๋˜๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณผ๊ฑฐ์—์š”. "๊ทผ๋ฐ Error Handling์ด ๋ญ”๋ฐ~?" ๋ง ๊ทธ๋Œ€๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋‹ค๊ฐ€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ, ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊ฑด์ง€~? ๋ผ๊ณ  ํ•ด์„ํ•ด๋„ ๋  ๊ฒƒ ๊ฐ™์•„์š”! ๊ตฌ๊ตฌ์ ˆ์ ˆ ์„ค๋ช…๋ณด๋‹ค๋Š”.. ์—ญ์‹œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋ณผ๊ฒŒ์š”! enum CustomError: Error { case invalidUrl case urlEmpty case other } ๋จผ์ € Custom ํƒ€์ž…์œผ๋กœ Error๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์–ด์š”. ์ด๋Ÿฐ ์—๋Ÿฌํƒ€์ž…์€ ์›ํ•˜๋Š”๋Œ€๋กœ ์ง€์ •ํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์›ํ•˜๋Š” ๋งŒํผ case๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜๋„ ์žˆ์–ด์š”~!..

[Swift] Bento #1. iPhone ์—ฐ๋ฝ์ฒ˜ ๊ฐ€์ ธ์˜ค๊ธฐ

ใ…Žใ…Ž ๋˜ ์˜ค๋žœ๋งŒ์— ๊ธ€์„ ์จ๋ด…๋‹ˆ๋‹ค~~ ์•ž์œผ๋กœ ์ข…์ข… ์—ฐ๋ฝ์ฒ˜ ๊ฐ€์ ธ์˜ค๊ธฐ, ์ด๋ฉ”์ผ๋ณด๋‚ด๊ธฐ, ์ „ํ™”๊ฑธ๊ธฐ, ์•ฑ์‹คํ–‰ํ•˜๊ธฐ, ๋กœ์ปฌNoti, ๋ณด์•ˆ ๋“ฑ๋“ฑ ์•„์ดํฐ์˜ OS๊ธฐ๋Šฅ(?)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋“ค์— ๋Œ€ํ•ด์„œ ๋ช‡๊ฐ€์ง€๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”!! ์ด ํ•ญ๋ชฉ๋“ค์„ ๊ฐ„๋‹จํžˆ Bento ์‹œ๋ฆฌ์ฆˆ! ๋ผ๊ณ  ํ•˜๊ณ  ์‹œ์ž‘ํ•ด๋ณผ๊ฒŒ์š” ๐Ÿ‘‰ ์ฒซ๋ฒˆ์งธ ํฌ์ŠคํŒ…์€ ์—ฐ๋ฝ์ฒ˜ ๊ฐ€์ ธ์˜ค๊ธฐ์ž…๋‹ˆ๋‹ค! ๋จผ์ € ํœด๋Œ€ํฐ์˜ ์—ฐ๋ฝ์ฒ˜์— ์ ‘๊ทผํ•˜๋ ค๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ํ—ˆ๋ฝํ•ด์•ผ ๋˜์š”!! ์•ฑ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜, ์นด๋ฉ”๋ผ๋กœ ์ฐ์œผ๋ ค๊ณ  ํ•˜๊ฑฐ๋‚˜ ๋“ฑ๋“ฑ ํ• ๋•Œ ์ด๋Ÿฐ๊ฑฐ ๋งŽ์ด ๋ณด์…จ์ฃ ~~? ์ด ๊ถŒํ•œ์„ ํš๋“ํ•˜๊ธฐ ์œ„ํ•ด, ํ”„๋กœ์ ํŠธ ์„ค์ •์„ ํ•ด์ค๋‹ˆ๋‹ค. Info.plist์— ์ด ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”! ์ €๋Š” ์ด๋Ÿฐ ํŠน์ • ๋ชฉ์ ์„ ๊ฐ€์ง€๋Š” ๊ธฐ๋Šฅ๋“ค์„ ํ”„๋กœํ† ์ฝœ๋กœ ๋”ฐ๋กœ ์ •์˜๋ฅผ ํ•ด๋‘ฌ์š”. ์ด๋ฒˆ์—๋Š” ์—ฐ๋ฝ์ฒ˜ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด๋‹ˆ๊นŒ ContactUsable์ด๋ผ๊ณ  ํ”„๋กœํ† ์ฝœ์„ ์ •์˜ํ•ด..

[RxSwift] RxSwift ์žฅ๋‹จ์ 

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ RxSwift์— ์ž…๋ฌธํ•ด๋ดค๋Š”๋ฐ์š”~!! ๊ทธ๋Ÿผ ์ด RxSwift๋Š” ์™œ์จ์•ผํ• ๊นŒ์š”~? ์žฅ๋‹จ์ ์„ ํ•œ๋ฒˆ ํŒŒํ—ค์ณ๋ณผ๊ฒŒ์š”!! RxSwift์˜ ์žฅ์  1. ๋ฐ˜์‘ํ˜• ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ œ๊ณตํ•˜๋Š” ๋ช…ํ™•ํ•จ, ๋น„๋™๊ธฐ๋ฅผ ๋™๊ธฐํ™” ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅ 2. ์ผ๊ด€์„ฑ์ด ์—†๋Š” ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์˜ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋กœ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅ - ์–ด๋””์„œ๋Š” DispatchQueue, ์–ด๋””์„œ๋Š” OperationQueue..... 3. Rx๋กœ ์ผ๊ด€๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ํ™•์žฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜ ํŒจ๋˜์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ - ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•œ ๋กœ์ง์„ ์กฐํ•ฉํ•˜๊ธฐ ์‰ฝ๊ณ , ํ™•์žฅ์ด ์–ด๋ ค์šด ๋ถ€๋ถ„์„ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ 4. Thread ์ฒ˜๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์ง - Callback ์ง€์˜ฅ์—์„œ์˜ ํƒˆ์ถœ - UI ์ด๋ฒคํŠธ, ๋„คํŠธ์›Œํฌ ์ฒ˜๋ฆฌ ๋“ฑ๋“ฑ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ํ–ˆ์„ ๋•Œ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์‰ฌ์›€ 5. ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ง 6. ๋‹ค์–‘ํ•˜..

[RxSwift] RxSwift ์ž…๋ฌธํ•˜๊ธฐ

์‹œ๊ฐ„์ด ๊ฐˆ์ˆ˜๋ก ์ ์  RxSwift๋Š” ๊ผญ ์•Œ์•„์•ผ ํ•˜๋Š” ํŠธ๋ Œ๋“œ์ฃ ~~?ใ…Žใ…Ž Apple์—์„œ๋„ Rx+MVVM Base์ธ SwiftUI๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์ ์  ์ง€ํ–ฅํ•˜๋Š” ๊ฒƒ ๊ฐ™๊ณ ์š” ใ…Žใ…Ž (๊ฐœ์ธ์ ์ธ ์ƒ๊ฐใ…‹) ์—…๋ฌด๋ฅผ ํ•˜๋ฉด์„œ๋Š” ์ ‘ํ•ด๋ณผ ๊ธฐํšŒ๊ฐ€ ์—†์–ด์„œ, ํ˜ผ์ž ๋”ฐ๋กœ๋ผ๋„ ํ•œ๋ฒˆ ๊ณต๋ถ€ํ•˜๋ฉด์„œ "์ ์–ด๋„ ๊ฐœ๋…์ •๋„๋Š” ์•Œ๊ณ  ๊ธฐ๋ณธ์ •๋„๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ๊ฒ ๋‹ค" ํ•ด์„œ ์‹œ์ž‘ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”!! ๐Ÿ˜Ž ๊ทธ๋งŒํผ ์™•์ดˆ๋ณด๋ฅผ ์œ„ํ•œ ์ž…๋ฌธ์šฉ ํฌ์ŠคํŒ…์ด ๋˜๊ฒ ์ง€๋งŒ, ํ•ต์‹ฌ ๊ฐœ๋…์ด๋‚˜ ์›๋ฆฌ๋Š” ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์ƒ์„ธํžˆ ๋‹ค๋ค„๋ณผ ์˜ˆ์ •์ด๋ผ ์กฐ๊ธˆ์€ ๊ธด ํฌ์ŠคํŒ…์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!! ๐Ÿ˜ญ ๊ทธ์น˜๋งŒ! ์ด ํฌ์ŠคํŒ…์„ ์ฒœ์ฒœํžˆ๋ผ๋„ ์™„์ฃผํ•˜์‹ ๋‹ค๋ฉด RxSwift์— ๋Œ€ํ•œ ๊ฐœ๋…์ด๋‚˜ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์€ ์ตํžˆ์‹ค ์ˆ˜ ์žˆ์„๊ฑฐ์—์š” ๐Ÿง‘‍๐Ÿ’ป RxSwift์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ธฐ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—, ๊ธฐ๋ณธ์ ์ธ Swift์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ..