์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- ๋ฐฑ์ค
- Flutter
- ํ๋ก๊ทธ๋๋จธ์ค
- CollectionView
- rxcocoa
- MVVM
- UIKit
- RxSwift
- node.js
- BOJ
- Lv2
- arkit
- Xcode
- tableView
- SnapKit
- swift
- SwiftUI
- designpattern
- XCTest
- TCA
- Swfit
- reactorkit
- raywenderlich
- combine
- ํจ์คํธ์บ ํผ์ค
- realm
- Kuring
- visionOS
- BFS
- ios
- Today
- Total
lgvv98
[SwiftUI] @StateObject ๋ณธ๋ฌธ
@StateObject
โ ์๋ ๊ณต์๋ฌธ์๋ฅผ ๋ฐํ์ผ๋ก ์์ฑํ์์ต๋๋ค.
https://developer.apple.com/documentation/swiftui/stateobject
ํน์ฑ ์ ์ธ์ @StateObject ์์ฑ์ ์ ์ฉํ๊ณ ObservableObject ํ๋กํ ์ฝ์ ์ค์ํ๋ ์ด๊ธฐ ๊ฐ์ ์ ๊ณตํ์ฌ View, App ๋๋ Scene์์ ์ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค.
@StateObject var model = DataModel()
SwiftUI์์๋ ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ ์ธ์คํด์ค์ ๋ํด ํ ๋ฒ๋ง ๊ฐ์ฒด์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค. ๊ด์ฐฐ ๊ฐ๋ฅํ ๊ฐ์ฒด์ ์์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด SwiftUI๋ ํด๋น ์์ฑ์ ์์กดํ๋ ๋ทฐ์ ์ผ๋ถ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
Text(model.title) // Updates the view any time `title` changes.
์ฐ๋ฆฌ๋ ObservedObject ์์ฑ์ ์ด์ฉํด์ ์๋ ์์ฑ์ state ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ environmentObject(_:) modifier๋ฅผ ์ ์ฉํจ์ผ๋ก์ ๋ทฐ์ ๊ณ์ธต์ ํ๊ฒฝ์ ์ ์ฉํ ์ ์์ต๋๋ค.
ContentView()
.environmentObject(model)
์์ ์ฝ๋์์ ๋ณด๋ค์ํผ ๋ง์ฝ environment object๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ContentView ์์ ์๋ ๊ฐ์ฒด ๋๋ ๊ทธ๊ฒ์ ํ์ ๊ณ์ธต์ ์ด๋์๋ EnvironmentObject ์์ฑ์ ์ฝ์ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ๊น! State์ Binding์ ์ด์ฉํ ๊ธฐ๋ฒ๊ณผ environmentObject๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ์ ์ฐจ์ด๋ฅผ ์์๋ด ์๋ค.
State์ Binding์ ์ฃผ๋ก 1:1 ์ํฉ์์ ์ ์ฉํ๋ค
๋ค๋ง, ํ๋์ ๋ณ์๊ฐ ์ฌ๋ฌ ํ์ ๊ณ์ธต์ ๊ฑด๋๊ฐ์ผ ํ๋ ๊ฒฝ์ฐ State์ Binding์ผ๋ก ๋ง๋ค์ด๋๋ฉด ๋๋ฌด ๋ถํธํ๋ค.
์ด ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด environment์ด๋ค.
Kuring ํ๋ก์ ํธ์์ UIKit์ SwiftUI๋ก ๋ณ๊ฒฝํ ๋ HomeView - NoticeWebView - WebView ์ด๋ ๊ฒ ์ธ๊ฐ์ง์์ NoticeModel์ด ๊ณต์ ๋์๋๋ฐ, ์ด๋ฐ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด BEST!
@EnvironmentObject var model: DataModel
$ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ๊ฐ์ฒด์ ์์ฑ ์ค ํ๋์ ๋ํ @Binding์ ๊ฐ์ ธ์ต๋๋ค. ๊ฐ์ฒด์ ์์ฑ ์ค ํ๋์ ๋ํ ์๋ฐฉํฅ ์ฐ๊ฒฐ์ ๋ง๋ค๋ ค๋ฉด ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ธ์ ์ ์ฅ๋ isEnabled๋ผ๋ ๋ถ์ธ ๊ฐ์ Toggle์ด ์ ์ดํ๋๋ก ํ ์ ์์ต๋๋ค.
Binding์์ ์ํ์ ๋ํ ๋ฐ์ดํฐ ๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด ์ฝ๊ฒ ๋งํด์ $ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด๋ผ!!
RxSwift ์๊ฐํ๋ฉด ์ํ๋ฅผ ๊ด์ฐฐํ๋ ค๊ณ ๊ตฌ๋ ํ๋ค๋ ๋๋!
Toggle("Enabled", isOn: $model.isEnabled)
'apple > ๐ SwiftUI & Combine' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Combine] Networking(feat. RestAPI) (0) | 2022.06.11 |
---|---|
[Combine] Let's study Combine! (feat. SwiftUI) (0) | 2022.06.03 |
[SwiftUI] State and Data Flow (0) | 2022.06.02 |
[iOS] ํ๋ฉด ์คํฌ๋ฆฐ์ท ๋ฐ ๋ นํ ๊ฐ์ง (feat. SwiftUI) (0) | 2022.06.02 |
[SwiftUI] ViewModifier (0) | 2022.06.02 |