728x90
728x90
๋ชฉ์ฐจ
- Concurrent data models
- SwiftUI and the main actor
- New concurrency tools
ํด๋น ์์์ ๋ณด๊ธฐ์ ์ ์ฐธ๊ณ ํ๋ฉด ์ข์ WWDC ์์
- Meet async/await in Swift
- Explore structured concurrency in Swift
์์ ์ฑ ) ์ฐ์ฃผ ์ด๋ฏธ์ง ๋ชฉ๋ก๋ค ๋ณด์ฌ์ฃผ๊ณ ์ ์ฅํ๋ ์ฑ
(์ฐ์ฃผ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ค๋ ค๋ฉด ์ค๋๊ฑธ๋ฆฐ๋ค๋ ํฐ๊ทธ๋ฆผ์ด ์์๋ฉ๋๋ค ๐ง)
Concurrent data models
- ์ด๋ฏธ์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ธ SpacePhoto
- ์ด๋ฏธ์ง ๋ฐฐ์ด์ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ธ Photos
- ObservableObject ๋ก ๋์ด์์ด @published ์ด๋ ธํ ์ด์ ์ด ๋ถ์ items ๊ฐ์ด ๋ณ๊ฒฝ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ SwiftUI View ์ ๋ฐ์ดํธ๋ ๊ฒ์ผ๋ก ๊ธฐ๋!
- SwiftUI ์ฝ๋ : ์ฐ์ ํ์ดํ์ ๋ฆฌ์คํธ ํํ๋ก ๋ณด์ฌ์ฃผ๊ณ ์๋ ์ํ
how SwiftUI interacts with observable object
- SwiftUI ๋ทฐ๊ฐ ์
๋ฐ์ดํธ๋๋ ์๋ช
์ฃผ๊ธฐ์ธ "run loop" ์ ๋ํด ์ฐ์ ์ดํด๋ณด์!
- Swift 5.5 ์์๋ run loop ๋ Main actor ์์ ์คํ๋๋ค.
- ๋ฐ ๋ฃจํ๋ "์ฌ์ฉ์๋ก๋ถํฐ ์ด๋ฒคํธ ์์ -> ๋ชจ๋ธ ์
๋ฐ์ดํธ -> SwiftUI ๋ทฐ๋ฅผ ํ๋ฉด์ ๋ ๋๋ง" ๋ฅผ ๋ฐ๋ณตํ๊ณ , ์ด๋ฅผ "ticks of the run loop" ๋ผ๊ณ ํํํ๋ค.
- Run loop ๋ฅผ ๊ธธ๊ฒ ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- items ๋ Published ์์ฑ์ธ์ ์ ์ฃผ๋ชฉ ๐ง
- objectWillChange ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ณ , ์๋ฒ๋ก๋ถํฐ ๊ฐ์ ธ์จ ์ฌ์ง์ items ์ฉ ์คํ ๋ฆฌ์ง์ ๊ธฐ๋กํ๋ค.
- SwiftUI ๋ objevtWillChange ์ด๋ฒคํธ๋ฅผ ๋ณด๊ณ items ์ ์ค๋ ์ท์ ์ฐ๋๋ค.
- ์ค๋ ์ท ์ดํ์ ๋ค์ run loop tick ์์ SwiftUI ๋ ์ค๋ ์ท๊ณผ ํ์ฌ ๊ฐ์ ๋น๊ตํ๋ค.
- ์ค๋ ์ท๊ณผ ํ์ฌ items ๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ View ๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
- ์ด ๋ชจ๋ ๊ณผ์ ์ Main actor ์์ ๋ฐ์ํ๋ฏ๋ก ์์๋๋ก ๋ฐ์ํ๋ค.
- ๋ฉ์ธ์์ ์์ ํ๋ ๋๋ ค์ง๊ฑฐ๋ผ๋ ํฐ๊ทธ๋ฆผ! ๐ง
- ์ง๋๋ฒ์ ๋ณธ Data Essentials ์์์์ main actor ์์ ๋ง์ ์์ ์ ์ํํ๋ฉด ๋๋ ค์ง๋ค๋ ๊ฒ์ ์ด์ผ๊ธฐ ํ์๋ค.
- fetchPhotos() ๋ฉ์๋๊ฐ ์ค๋๊ฑธ๋ฆด ๊ฒฝ์ฐ ์ ์ ์๊ฒ hitch ํ์์ด ๋ํ๋ ์ ์๋ค.
- DispatchQueue.global().async ์ฝ๋๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ์ง๋ง, ์๋ ์ฝ๋๋๋ก๋ฉด ์์๊ฐ ๋ณด์ฅ๋์ง ์์ SwiftUI view ๊ฐ ์
๋ฐ์ดํธ ๋์ง ์์ ์ ์๋ค.
- await ์ ์ด์ฉํด์ ์ด๋ฏธ์ง๋ฅผ fetch ํ๋ ๋์์๋ main ์์๋ ๋ค๋ฅธ ์์
๋ค์ด ๋์ํ ์ ์๊ฒ ํ๊ณ , fetch ๊ฐ ๋๋ ํ์ SwiftUI View ๋ฅผ ์
๋ฐ์ดํธ ํ๋ ์์๋ฅผ ๋ณด์ฅํ ์ ์๋ค.
- objevtWillChange ์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ๊ฐ ์ ์์ ์ผ๋ก ๋๊ธฐ ์ํด Photos ํด๋์ค์ @MainActor ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํด์ Main actor ์์๋ง ์ก์ธ์คํ ์ ์๋๋ก ๋ณด์ฅํด์ฃผ์.
Task
https://developer.apple.com/documentation/swiftui/view/task(priority:_:)
- Catalog ๋ทฐ๊ฐ ํ์๋ ๋๋ง๋ค ๋น๋๊ธฐ ์์
์ธ updateItems ๋ฅผ ํธ์ถํ๋๋ก ํด๋ณด์.
- ์ด์ ์๋ appear ๋ฅผ ์ด์ฉํ์ง๋ง, task ๋ฅผ ํตํด ๋น๋๊ธฐ ์์ ์ ๋ทฐ์ ์ฐ๊ฒฐํ ์ ์๋ค.
- task ๋ view ์ ์๋ช ์ฃผ๊ธฐ๊ฐ ์์๋ ๋ ์์๋๊ณ , view ์ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋๋๋ฉด task ๋ ์๋์ผ๋ก ์ทจ์๋๋ค.
- ๋ทฐ์ ์๋ช
์ฃผ๊ธฐ์ ๋ํด์๋ Demystify SwiftUI ์์ ์ฐธ๊ณ !
AsyncImage API
https://developer.apple.com/documentation/SwiftUI/AsyncImage
- AsyncImage ๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ค๋ ์ฒ๋ฆฌ๋ฅผ ์งํํ ์ ์๋ค.
- ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ๋ค๊ฐ ์๋ฌ๊ฐ ๋ฌ์ ๋์๋ placeholder ๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ๋์ด์๋ค.
SwiftUI View + async await
- Button ์ ๋ํ ์ก์ ๋ด๋ถ์ async - await ์ ์ด์ฉํด์ ๋น๋๊ธฐ ๋์์ ์ํํ๋๋ก ํ ์ ์๋ค.
- @State ๋ณ์๋ฅผ ๋ง๋ค์ด ๋ก๋ฉ ์ค์ ์ฒ๋ฆฌํ ์ ์๋ค.
List - refreshable
func refreshable(action: @escaping () async -> Void) -> some View
https://developer.apple.com/documentation/swiftui/view/refreshable(action:)
- ์๋ก๊ณ ์นจ์ ์ํ refreshable modifier ๊ฐ ์ ๊ณต๋๋ค.
- List ์ refreshable ์ ์ถ๊ฐํด์ ํด๋น ์ฝํ ์ธ ์ pull to refresh ๊ธฐ๋ฅ์ ๋ฃ์ ์ ์๋ค.
- closure ๋ด๋ถ์ ๋น๋๊ธฐ๋ก ๋์ํ ๋ฉ์๋๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
Wrap up
- SwiftUI ์์๋ async ๊ธฐ๋ฐ์ผ๋ก ๋์์ ์ํํ ์ ์๋๋ก ๋ฉ์๋๋ค์ด ์ ๊ณต๋๋, await ์ ์ฌ์ฉํ์ !
728x90
728x90
'๐ iOS > WWDC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] WWDC23: Meet ActivityKit / Live Activity ์์๋ณด๊ธฐ (0) | 2023.10.09 |
---|---|
[WWDC2017] Love at First Launch (0) | 2023.05.24 |
[WWDC20] The Push Notifications primer (APNs / iOS ํธ์ ๋ฑ๋ก) (0) | 2023.02.14 |
[WWDC18] iOS Memory Deep Dive (2) | 2022.11.27 |
[WWDC19] Advances in Collection View Layout - Part 1 (0) | 2022.10.17 |