[SwiftUI] pre/next buttons๊ฐ€ ์žˆ๋Š” ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋” ๊ตฌํ˜„ํ•˜๊ธฐ
ยท
๐ŸŽ Dev/๊ตฌํ˜„
Topic: - pre/next ๋ฒ„ํŠผ์œผ๋กœ ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋” ์ž‘๋™- ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋”- tapGesture๋กœ ๋ฒ„ํŠผ ์ˆจ๊ธฐ๊ธฐ ๋ฐ ๋“œ๋Ÿฌ๋‚ด๊ธฐ- ์ธ๋ฑ์Šค ๋„˜๋ฒ„์— ๋”ฐ๋ผ ์ฒซ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ์ผ ๋•Œ next ๋˜๋Š” pre ๋ฒ„ํŠผ ์ˆจ๊ธฐ๊ธฐ  ์ ‘๊ทผ: - ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ์— ๋“ค์–ด์˜ฌ ์ด๋ฏธ์ง€ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ tabView์™€ forEach๋ฅผ ํ™œ์šฉํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.// ํ…Œ์ŠคํŠธ์šฉ ์ด๋ฏธ์ง€๋ฐฐ์—ด private var images: [String] = [ "image1", "image2", "image3", "image4" ] ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ๋„ฃ์–ด๋‘” ์ด๋ฏธ์ง€๋กœ ํ™•์ธํ•  ์˜ˆ์ •์ด๋ผ, ์ด๋ฏธ์ง€ ๋ฐฐ์—ด์€ UIKit๊ณผ ๋˜‘๊ฐ™์ด ๋งŒ๋“ค์—ˆ๋‹ค.      - tabView๋ฅผ ์จ์„œ ์Šฌ๋ผ์ด๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์ด๋ฏธ์ง€ ๊ฐœ์ˆ˜์— ..
[SwiftUI] TabView page indicator ์ปค์Šคํ…€ํ•˜๊ธฐ
ยท
๐ŸŽ Dev/๊ตฌํ˜„
์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ๋ทฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋Š”๋ฐ, ํŽ˜์ด์ง€ ์ธ๋””์ผ€์ดํ„ฐ๊ฐ€ ์• ํ”Œ์ด ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ๋ณธ ์ธ๋””์ผ€์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์ปค์Šคํ…€์„ ํ•ด์•ผํ–ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ธ๋””์ผ€์ดํ„ฐ๋Š” ์œ„์™€ ๊ฐ™์€ ๋ทฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด๋ฏธ์ง€์˜ ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ๋ถ€๋ถ„์— ํ•ด๋‹นํ•œ๋‹ค. ํ”ผ๊ทธ๋งˆ์— ์˜ฌ๋ผ์™€ ์žˆ๋Š” ์ธ๋””์ผ€์ดํŠธ ๋””์ž์ธ์ด ํ˜„์žฌ ์ด๋ฏธ์ง€์˜ ์ˆœ์„œ์ผ ๊ฒฝ์šฐ ์ธ๋””์ผ€์ดํ„ฐ ํ˜•ํƒœ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋””์ž์ธ์ด์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋””์ž์ธ ๊ฐ€์ด๋“œ๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ SwiftUI์—์„œ Tabview๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š” ์›ํ˜• ์ธ๋””์ผ€์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๊ณ , custom ํ˜•์‹์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ๋‹ค.    ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ: 1. ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋”2. ์ผ์ •์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์„ ๋‘๊ณ  ์Šฌ๋ผ์ด๋”์˜ ์ด๋ฏธ์ง€๊ฐ€ ๋ฐ”๋€Œ์–ด์•ผ ํ•จ3. ์ด๋ฏธ์ง€๊ฐ€ ๋ฐ”๋€” ๋•Œ, ํ•ด๋‹น ์ด๋ฏธ์ง€ ์ˆœ์„œ์˜ ์ธ๋””์ผ€์ดํ„ฐ ๋ชจ์–‘์ด ์›ํ˜•์—์„œ ๊ฐ€๋กœ๋กœ ๊ธด ํƒ€์›ํ˜•์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•จ     ๊ทธ๋ž˜์„œ..
[SwiftUI] NavigationView, NavigationStack, navigationTitle
ยท
๐ŸŽ Dev/SwiftUI
Topic:- NavigationTitle ๋„ฃ๊ธฐ- NavigationItem ์„ค์ •       SwiftUI ๋ธ”๋กœ๊ทธ๊ธ€๋“ค์„ ์ฐธ๊ณ ํ•˜๊ธฐ๊ฐ€ ๊ฐ€๋” ์• ๋งคํ•˜๋‹ค๊ณ  ๋Š๊ปด์งˆ ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ์•„๋ฌด๋ž˜๋„ ์• ํ”Œ์ด ๊ณ„์† ๊ฐœ์„ ํ•˜๊ณ  ์žˆ๋Š” ์ค‘์ด๋ผ ๊ณผ๊ฑฐ(๋ผ๊ธฐ์—” ๋น„๊ต์  ์ตœ๊ทผ์ด์ง€๋งŒ)์— ์“ฐ์—ฌ์ง„ ๊ธฐ์ˆ ๋“ค ์ค‘ Deprecated ๋œ ๊ฒŒ ๋งŽ๋‹ค๋Š” ์  ๊ฐ™๋‹ค. ์‹ค์ œ๋กœ NavigationView๋ฅผ ์‚ฌ์šฉํ•ด์„œ navigationTitle์„ ๋‹จ ๋ธ”๋กœ๊ทธ ๊ธ€๋“ค์ด ๋งŽ์•˜๋Š”๋ฐ, ํ˜„์žฌ๋Š” Deprecated ๋˜์—ˆ๋‹ค. ๊ทธ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒŒ NavigationStack์ด๋‹ค.         ๋‹ค๋ฅธ ์Šคํƒ๋“ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ NavigationStack์ด ๋๋‚˜๋Š” ์ค‘๊ด„ํ˜ธ ๋์—.navigationTitle("Title Text")๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ดํ‹€์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ, nav..
[Swift] Keychain vs UserDefaults
ยท
๐ŸŽ Dev/Swift
iOS ์•ฑ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด, ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ์ง€๋ฅผ ํ•œ๋ฒˆ์”ฉ์€ ๊ผญ ๊ณ ๋ฏผํ•ด๋ณด๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.CoreData, UserDefaults, Keychain ๋“ฑ์ด ์žˆ๋Š”๋ฐ, ์ด ๊ธ€์€ ๋ณด์•ˆ ์œ ์ง€๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ Keychain์— ๋Œ€ํ•ด ์ •๋ฆฌ๋‹ค.      1. UserDefaults๋กœ  ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด ์ €์žฅ? ๋ฌผ๋ก , UserDefaults์— ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์šฐ์„  UserDefaults์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž.  UserDefaults๋Š”, 1. ๋Ÿฐํƒ€์ž„์— ๋™์ž‘2. ์•ฑ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด info ํŒŒ์ผ์— key-value์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ์ด๋ผ๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒŒ๋“œ๋ฐ•์Šค์— ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ฑ์„ ์‚ญ์ œํ•˜๋ฉด ์ €์žฅ๋œ ๋ฐ์ด..
[Swift] Method Dispatch
ยท
๐ŸŽ Dev/Swift
SweepSwift iOS ๋ฉด์ ‘ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์„ ์ž‘์„ฑํ•œ ๊น€์— iOS ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์•ฑ์˜ ๊ธฐ๋Šฅํ–ฅ์ƒ ๋ฉด์—์„œ ๊ผญ ๊ณ ๋ คํ•ด๋ด์•ผํ•œ๋‹ค๋Š” Method Dispatch์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.    โœ”๏ธŽ Method DispatchMethod dispatching is the process of finding the address of instructions to be executed by the CPU when a particular method is called. ์–ด๋–ค ์ธ์Šคํ„ด์Šค์˜ ํ˜ธ์ถœ๊ตฌ๋ฌธ์—์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ• ์ง€ ์„ ํƒํ•˜๋Š” ๊ฒƒ์„ ๋ฉ”์†Œ๋“œ ๋””์ŠคํŒจ์น˜๋ผ๊ณ  ํ•œ๋‹ค.์–ด๋Š ์‹œ์ (์ปดํŒŒ์ผํƒ€์ž„ vs ๋Ÿฐํƒ€์ž„)์— ์–ด๋–ค method๋ฅผ ์‚ฌ์šฉํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ์„œ Static Dispatch์™€ Dynamic Dispatch๋กœ ๋‚˜๋‰œ..
[UIKit] CustomView
ยท
๐ŸŽ Dev/UIKit
์ƒˆ์‹น์—์„œ ํ›„๋ฐ˜๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋‹น์‹œ CustomView๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด์„œ ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.์ฃผ๋กœ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ UI๋ฅผ ๊ทธ๋ ค์™”๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๊ธ€์—์„  ์ฝ”๋“œ ๋ฒ ์ด์Šค + SnapKit ๊ธฐ๋ฐ˜์œผ๋กœ customView๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ค.        ์ปค์Šคํ…€ ๋ทฐ๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒโ“ ์šฐ์„  ๋‚ด๊ฐ€ CustomView๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์žฌ์‚ฌ์šฉ์„ฑ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค.์œ„ ์บก์ณ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ, ๋ฐ˜๋ณต๋˜๋Š” UI ์š”์†Œ๊ฐ€ ๋งŽ์€ ํ™”๋ฉด์„ ๊ทธ๋ฆด ๋•Œ ๋งค๋ฒˆ UI์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ํฐํŠธ๋ฅผ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค๋ฉด?ํฌ์ธํŠธ ์ปฌ๋Ÿฌ๋ฅผ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค๋ฉด?๋ฒ„ํŠผ์˜ ์ฝ”๋„ˆ ๋ ˆ๋””์–ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๋ฉด? ๋™์ผํ•œ ๊ตฌ์„ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ผ์ผ์ด ์ฐพ์•„์„œ ์ˆ˜์ •ํ•œ๋‹ค๋ฉด, ๋ฐ˜๋ณต๋˜๋Š” ๋ทฐ์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ์ˆ˜์ •์˜ ๊ตด๋ ˆ์— ๋น ์งˆ ์ˆ˜ ๋ฐ–์— ์—†์œผ๋‹ˆ๊นŒ. ๋˜ํ•œ, ๋ถ€๋ถ„์ ์œผ..