Deep_Dev
[SwiftUI] Property Wrapper โ‘ก
๐ŸŽ iOS/SwiftUI 2024. 3. 27. 19:30

โœ… Property Wrapper ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ์‹ธ ํŠน๋ณ„ํ•œ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด๋ณด๋ฉด, ์–ด๋–ค ๋กœ์ง๋“ค์„ ๋งค๋ฒˆ ๋™์ผํ•˜๊ฒŒ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š๊ณ  Property Wrapper๋กœ ๋งŒ๋“  ํƒ€์ž…์œผ๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•ด ๋™์ผ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. โœ… Property Wrapper๊ฐ€ ์—†๋‹ค๋ฉด ? struct House { private var width = 0 var size: Int { get { return width } set { width = pow(newValue, 20) } } } struct KoreaHouse { private var _appartment = House() private var _villa = House() var appartmentSize: Int { get { return _appar..

[SwiftUI] ํ”„๋กœํผํ‹ฐ๋ž˜ํผ ์ •๋ฆฌ
๐ŸŽ iOS/SwiftUI 2024. 3. 17. 17:54

โœ… Property Wrapper ์†์„ฑ(Property)์— ์ถ”๊ฐ€์ ์ธ ํ–‰๋™์ด๋‚˜ ๊ณ„์‚ฐ์„ ๋ง๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ๋กœ์ง์ด๋‚˜ ๊ณ„์‚ฐ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค. โœ… PreView ( ์š”์•ฝ ) @State : ๋ทฐ ๋‚ด๋ถ€์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๋กœ์ปฌ ์ƒํƒœ๊ฐ’ ์ €์žฅ @Binding : ๋ถ€๋ชจ ๋ทฐ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฐ’์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง @ObservedObject : ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. @EnvironmentObject : ์•ฑ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ์ƒํƒœ ๊ฐ์ฒด ์‚ฌ์šฉ @Published : ObservableObject์˜ ์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ View๋ฅผ ์ž๋™ ๋ฆฌํ”„๋ ˆ์‹œ @AppStorage : UserDefaults์— ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ..

article thumbnail
[iOS][SwiftUI] @State @Binding
๐ŸŽ iOS/SwiftUI 2024. 1. 7. 00:08

๐Ÿ“š @State @Binding Property Wrapper์— ๋Œ€ํ•ด์„œ State โœ… PropertyWrapper ? ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์“ธ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. SwiftUI์—์„œ๋Š” property wrapper๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜์˜ ๋ณ€ํ™”์™€ ํ•ด๋‹น ์ž‘์—…์„ ์ž๋™ํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค. SwiftUI๋Š” state๋กœ ์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ๋“ค์˜ ์ €์žฅ์†Œ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. StateValue ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ทฐ๋Š” ํ•ด๋‹น value์˜ appearance๋ฅผ ๋ฌดํšจํ™”ํ•˜๊ณ  ๋‹ค์‹œ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค. State ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด View๋Š” ์ƒˆ๋กœ ๋žœ๋”๋ง์„ ํ•˜์—ฌ ํ•ญ์ƒ ์ตœ์‹  ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. State ์ธ์Šคํ„ด์Šค๋Š” ๊ทธ ์ž์ฒด๋กœ ๊ฐ’์ด ์•„๋‹Œ, ๊ฐ’์„ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ํ˜„์žฌ ๋ทฐ UI์˜ ํŠน์ •์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต Priv..

article thumbnail
[iOS][SwiftUI] Save Color in UserDefaults
๐ŸŽ iOS/SwiftUI 2024. 1. 1. 14:41

๐Ÿ“š Save Color in UserDefaults from Color Picker variable in Color Data private let COLOR_KEY = "COLOR" private let userDefaults = UserDefaults.standard saveColor func saveColor(color: Color) { let color = UIColor(color).cgColor if let components = color.components { userDefaults.set(components, forKey: COLOR_KEY) } } loadColor func loadColor() -> Color { guard let colorComponenets = userDefaults...

[iOS][SwiftUI] @main @UIApplicationMain
๐ŸŽ iOS/SwiftUI 2023. 12. 28. 22:51

๐Ÿ“š main & UIApplication @main ํ”„๋กœ๊ทธ๋žจ์˜ ์ง„์ž…์ ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์–ด๋Š ํ”„๋กœ๊ทธ๋žจ์ด๋“ ์ง€ ์‹œ์ž‘์ ์ธ Entry Point๊ฐ€ ์กด์žฌํ•ด์•ผํ•œ๋‹ค. Swift์—์„œ๋Š” @main์„ ํ†ตํ•ด์„œ ์–ด๋””์„œ๋ถ€ํ„ฐ ์ด ์•ฑ์ด ์ตœ์ดˆ ์‹คํ–‰๋˜๊ณ  ์‹œ์ž‘๋ ์ง€๋ฅผ ๋ช…์‹œํ•ด์ฃผ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค. ์ด ํ‚ค์›Œ๋“œ๋Š” Swift 5.3 ์ด์ƒ(Xcode 12)๋ถ€ํ„ฐ ์‚ฌ์šฉ๋œ ํ‚ค์›Œ๋“œ๋กœ ๋ฐ”๋กœ ์ด์–ด์„œ ์„ค๋ช…ํ•˜๊ฒ ์ง€๋งŒ @main ํ‚ค์›Œ๋“œ๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „์—๋Š” @UIApplcationMain ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. > UIKit์˜ ๊ฒฝ์šฐ AppDelegate๊ฐ€ ์‚ฌ์‹ค์ƒ App Life Cycle์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  ์ฃผ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— @main ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™๋Š”๋‹ค. import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate..

article thumbnail
[iOS][SwiftUI] Init ()
๐ŸŽ iOS/SwiftUI 2023. 12. 28. 22:11

๐Ÿ“š ์ดˆ๊ธฐํ™”์— ๋Œ€ํ•ด์„œ AppDelegate() init() AppDelegate๋ฅผ ์ด์šฉํ•œ ์ดˆ๊ธฐํ™” ์ด ๋ฐฉ๋ฒ•์€ ์‚ฌ์‹ค AppDelegate์˜ ์—ญํ• (์ง„์ž…์ )์„ ํ•˜๋Š” ๊ฒƒ์ด ๋”ฐ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒ์žฅ๋˜์ง€๋Š” ์•Š๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. @main struct PushMessageApp: App { var body: some Scene { WindowGroup { ContentView() } } } ์œ„ ์ฝ”๋“œ์—์„œ ๋ณด์ด๋Š” App ํ”„๋กœํ† ์ฝœ ์ž์ฒด๊ฐ€ ์•ฑ์˜ ๊ตฌ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ตฌ์กฐ์ฒด์— ํ”„๋กœํ† ์ฝœ์„ ์ง€์ •ํ•ด์ฃผ์–ด์„œ ์•ฑ์˜ ์‹œ์ž‘(Presenting) ์ง€์ ์„ ์ •ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ @main์„ ํ†ตํ•˜์—ฌ ์•ฑ์ด ์‹œ์ž‘๋˜๊ณ  ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ€์•ผํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ช…์‹œํ•ด์ฃผ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— AppDelegate๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฑ์˜ ์ดˆ๊ธฐํ™” ์ด์™ธ์—๋„ AppDele..