Swift/Xcode 9

[Swift] CoreData ํ™œ์šฉํ•ด๋ณด๊ธฐ (Subclass ์ƒ์„ฑ๋ฒ•, Double ํƒ€์ž… ์„ ์–ธ ์•ˆ๋˜๋Š” ์ด์œ )

CoreData๋ฅผ ํ™œ์šฉํ•ด์„œ ์ž‘์€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์—ฐ์Šตํ•ด๋ณผ๊นŒํ•ฉ๋‹ˆ๋‹ค! ์ด๋ฆ„, ์„ฑ๋ณ„, ๋‚˜์ด๋ฅผ ์ž…๋ ฅํ•œ ํ›„์ €์žฅ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, CoreData์— ์ €์žฅ๋˜๊ณ ์ „์ฒด์‚ญ์ œ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.โ‘  ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์šฐ์„  ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ํ•˜๋‹จ์— CoreData๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋ฉด ์œ„์™€ ๊ฐ™์ด xcdatamodeld ํŒŒ์ผ์ด ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.๋งŒ์•ฝ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰์ค‘์— CoreData๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค๋ฉด?๋”๋ณด๊ธฐCommand + N ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.โ‘ก Entity, Attributes, Relationships ์„ค์ •์ด์ œ ํ•˜๋‹จ Add Entity๋ฅผ ํด๋ฆญํ•ด์„œ Entity๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.์—ฌ๊ธฐ์„œ Entity์ด๋ฆ„์€ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ ์ž˜ ๊ธฐ์–ตํ•˜๊ธฐ!(์ €๋Š” Testํ”„๋กœ์ ํŠธ๋ผ ์ œ ์ด๋ฆ„ Yegr๋ผ๊ณ  ์ง€์—ˆ..

Swift/Xcode 2024.12.12

[Swift] CLLocationManager

๊ถŒํ•œ ์„ค์ •ํ•˜๊ธฐ (info.plist)- ํ•„์š”ํ•œ ๊ถŒํ•œ๋งŒ ์„ค์ •ํ•˜๊ธฐ- ๊ถŒํ•œ์— ๋Œ€ํ•œ ํ•„์š”์„ฑ Description ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐโœ”๏ธ Privacy - Location When In User Usage Descriptionforeground์—์„œ ์‹คํ–‰ ์ค‘์ผ ๋•Œ๋งŒ ์•ฑ์ด ์œ„์น˜ ์ •๋ณด์— ์—‘์„ธ์Šคํ•˜๋Š” ๊ฒฝ์šฐ ( iOS 11+ )โœ”๏ธ Privacy - Location Always and When In Use Usage Descriptionbackground์—์„œ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์•ฑ์ด ์œ„์น˜ ์ •๋ณด์— ์—‘์„ธ์Šคํ•˜๋Š” ๊ฒฝ์šฐ ( iOS 11+ )โœ”๏ธ Privacy - Location Always Usage Descriptionbackground์—์„œ ์•ฑ์ด ์œ„์น˜ ์ •๋ณด์— ์—‘์„ธ์Šคํ•˜๋Š” ๊ฒฝ์šฐ ( iOS 11- )โœ”๏ธ Privacy - Location D..

Swift/Xcode 2024.05.31

[Swift] UIButton Configuration

UIButton ConfigurationiOS 15๋กœ ์—…๋ฐ์ดํŠธ ์ดํ›„๋กœ UIButton์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค์–‘ํ•ด์กŒ๋‹ค.์—…๋ฐ์ดํŠธ ๋œ ์Šคํƒ€์ผ์„ ์ฑ„ํƒํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์–ด์šธ๋ฆฌ๋Š” ๋ฒ„ํŠผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.๊ธฐ์กด์— UIButton์€ .setTitle / .setImage ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฒ„ํŠผ์˜ ๋ชจ์–‘์„ ๋””์ž์ธํ–ˆ์ง€๋งŒ,iOS 15์—์„œ ์ถ”๊ฐ€๋œ UIButton.Configuration์€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์กฐ๊ธˆ ๋” ์‰ฝ๊ณ , ๋‹ค์–‘ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.configuration์€ ํฌ๊ฒŒ 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ๋ฒ„ํŠผ์„ ์ƒ์„ฑํ•  ๋•Œ, ๋ณด๊ณ  ๊ทธ๋ƒฅ ์ง€๋‚˜์ณค๋˜ ๋‹ค๋ฅธ ๋ฒ„ํŠผ๋“ค์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.1. plain (๋ฐฐ๊ฒฝ์ด ํˆฌ๋ช…ํ•œ ๋ฒ„ํŠผ)static func plain() -> UIButton.Configuration→ Creates ..

Swift/Xcode 2024.05.30

[Swift] View Drawing Cycle

View Drawing CycleVeiw Drawing Cycle์ด ๋ฌด์—‡์ผ๊นŒ?view๊ฐ€ ๋กœ๋“œ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ, ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š” Cycle์„ ๋งํ•œ๋‹ค.view๊ฐ€ ๋กœ๋“œ ์‹œ, ์‹œ์Šคํ…œ์ด UIView์—๊ฒŒ draw ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋“œ๋กœ์ž‰์„ ์š”์ฒญํ•œ๋‹ค.๊ทธ๋ฆฌ๊ณ  ์Šค๋ƒ…์ƒท์„ ์บก์ณํ•˜์—ฌ UIView์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.๊ทธ ๋‹ค์Œ ๋ทฐ์˜ ์ปจํ…์ธ  ๋ณ€๊ฒฝ ์‹œ ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋“ค์„ ํ˜ธ์ถœํ•˜์—ฌ ์‹œ์Šคํ…œ์—๊ฒŒ ์š”์ฒญํ•œ๋‹ค.iOS์˜ ์ด๋ฒคํŠธ๋Š” ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ์กด์žฌํ•˜๋Š” Run loop๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋œ๋‹ค.๊ทธ ์ค‘ Main Run loop๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.์ด Main Run loop์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ 'Update Cycle'์ด๋ผ๋Š” ๊ฒƒ์ด ๋ฐœ์ƒํ•œ๋‹ค.์—ฌ๊ธฐ์„œ Layout(size, position), Display(color, text, image),..

Swift/Xcode 2024.05.28

[Swift] Delegate ํŒจํ„ด

Delegate Pattern Delegate ํŒจํ„ด์€ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ๋‹จ์–ด ๋œป ๊ทธ๋Œ€๋กœ '์œ„์ž„ํ•˜๋‹ค'์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋ชจ๋“  ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์ž์‹ ์˜ ์ผ์„ ์œ„์ž„ํ•˜๋Š” ํ˜•ํƒœ์˜ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.1. ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค.2. ํ”„๋กœํ† ์ฝœ์— ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋“ค์ด ๋ช…์‹œ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค.3. ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ผ์˜ ์ผ๋ถ€๋ฅผ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์œ„์ž„ํ•  ์ˆ˜ ์žˆ๋‹ค.์ง€๊ธˆ๊นŒ์ง€ ์•ฑ์„ ๋งŒ๋“ค๋ฉด์„œ, ์•Œ๊ฒŒ ๋ชจ๋ฅด๊ฒŒ ์—ฌ๋Ÿฌ Delegate ํ”„๋กœํ† ์ฝœ์ด ์žˆ์—ˆ์„ ๊ฒ๋‹ˆ๋‹ค.(UITableViewDelegate, UITextFieldDelegate, ๋“ฑ๋“ฑ..)tableViewController๋„ command๋กœ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด, UITableViewDelegate๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด..

Swift/Xcode 2024.05.26

[Swift] UserDefaults

์ž‘์€ ํ”„๋กœ์ ํŠธ๋“ค์„ ๋งค์ผ ํ•˜๋‚˜์”ฉ ๋งŒ๋“ค๋ฉด์„œ,UserDefaults๋กœ ์•ฑ์ด ์ข…๋ฃŒ๋˜์–ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ๋„๋ก๊ณ„์† ์ €์žฅ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋ณด๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.ใ…Žใ…Ž์•„์ง ์ต์ˆ™ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ,์ •๋ฆฌํ•˜๋ฉด์„œ ํ™•์‹คํžˆ ๊ธฐ์–ตํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!โ˜บ๏ธ UserDefaults๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.๊ทธ ์ค‘ UserDefaults๋Š” ๋‹จ์ผ ๋ฐ์ดํ„ฐ ๊ฐ’(๊ฒฝ๋Ÿ‰)์„ ์ €์žฅํ•˜๋Š”๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค!์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ž๋™ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€, ์•Œ๋ฆผ ์ˆ˜์‹  ์—ฌ๋ถ€, ๊ฒฐ์ œ ์—ฌ๋ถ€, ์ด๋ฉ”์ผ, ๋‹‰๋„ค์ž„ ๋“ฑ ์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ์„ค์ •์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋“ค์€ iOS ๋””๋ฐ”์ด์Šค ๊ธฐ๊ธฐ์— ์ €์žฅ๋˜๊ณ , ์•ฑ์„ ์‚ญ์ œํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋“ค๋„ ํ•จ๊ป˜ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!๋จผ์ €! Storyboard์—์„œtextField, Button, L..

Swift/Xcode 2024.05.25

[Swift] tag ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๊ฐ„์†Œํ™”ํ•˜๊ธฐ

์•ฑ์„ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด,์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฒ„ํŠผ์ด ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.์œ„ ํ™”๋ฉด์ฒ˜๋Ÿผ ๋ง์ด์ฃ !์ฒ˜์Œ์— ์ด ์•ฑ์„ ๋งŒ๋“ค ๋•Œ, '๋…ธ๊ฐ€๋‹ค๊ฐ€ ๋”ฐ๋กœ ์—†๊ตฌ๋‚˜.' ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.9๊ฐœ์˜ ๋ฒ„ํŠผ์„ ๋ชจ๋‘ ํ•˜๋‚˜ํ•˜๋‚˜ Outlet ์—ฐ๊ฒฐ์„ ํ•˜๊ณ ,๋ฒ„ํŠผ์ด ํด๋ฆญ๋์„ ๋•Œ, ์–ด๋–ค ๊ธฐ๋Šฅ์„ ํ•ด์•ผํ•˜๋Š”์ง€ 9๊ฐœ์˜ Action์„ ์—ฐ๊ฒฐํ–ˆ๊ฑฐ๋“ ์š”!์ด๋ ‡๊ฒŒ ํ•˜๋‹ค๋ณด๋‹ˆ, ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ ํ˜€์žˆ์œผ๋‹ˆ ์ฝ”๋“œ๋„ ์—„์ฒญ ๊ธธ์–ด์กŒ์Šต๋‹ˆ๋‹ค.๐Ÿ˜… ์ด๋Ÿฐ ๋ถ€๋ถ„๋“ค์„ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ํ•˜๋‚˜ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!๋ฐ”๋กœ! tag๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ์š”์†Œ๋“ค์„ ํด๋ฆญํ•ด์„œ ์šฐ์ธก ์ธ์ŠคํŽ™ํ„ฐ ์˜์—ญ์„ ์‚ดํŽด๋ณด๋ฉด,์ด๋ ‡๊ฒŒ Tag๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋งŒ์•ฝ ๋ฒ„ํŠผ 3๊ฐœ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด,๋ฐ”๋กœ ์ด tag๋ฅผ ํ™œ์šฉํ•ด์„œ ์–ด๋–ค ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋Š”์ง€  ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์œ„์—..

Swift/Xcode 2024.05.20

[Swift] ํ•จ์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•ด์„œ ์ฝ”๋“œ ๊ฐœ์„ ํ•˜๊ธฐ

ํ•จ์ˆ˜UI ์ฝ”๋“œ๋ฅผ viewDidLoad์— ์ž‘์„ฑ์„ ํ•˜๋‹ค๋ณด๋ฉด,ํ•œ๋ˆˆ์— ๋ณด๊ธฐ๋„ ํž˜๋“ค๊ณ , ์ถ”ํ›„์— ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ•˜๊ธฐ๋„ ์ข‹์ง€ ์•Š์„ ๊ฒ๋‹ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ viewDidLoad์— ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ฆฌํ•˜์ฃ .์—ฌ๊ธฐ์„œ ์ƒ๊ธฐ๋Š” ๊ถ๊ธˆ์ฆ!๐Ÿค”'์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋งŒ๋“  designButtonUI๋Š” ํ˜ธ์ถœ์„ ํ•ด์ฃผ๋ฉด์„œ.. ์™œ viewDidLoad ํ•จ์ˆ˜๋‚˜ Action ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š”๊ฑฐ์ง€??'์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ํ•œ ๋ฒˆ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!!๐Ÿ˜€class ViewController: UIViewController { @IBOutlet var button1: UIButton! @IBOutlet var button2: UIButton! @IBOutlet var button3: UIButton! ..

Swift/Xcode 2024.05.20