Notice
Recent Posts
Recent Comments
Link
ยซ   2024/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

[SwiftUI] @StateObject ๋ณธ๋ฌธ

apple/๐Ÿš SwiftUI & Combine

[SwiftUI] @StateObject

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 6. 2. 20:56

@StateObject

 

โœ… ์•„๋ž˜ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

https://developer.apple.com/documentation/swiftui/stateobject

 

Apple Developer Documentation

 

developer.apple.com

 

๊ด€์ฐฐ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

ํŠน์„ฑ ์„ ์–ธ์— @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)

 

Comments