์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋ฐฑ์ค
- MVVM
- BOJ
- ํจ์คํธ์บ ํผ์ค
- Lv2
- Xcode
- XCTest
- node.js
- RxSwift
- tableView
- rxcocoa
- TCA
- realm
- designpattern
- reactorkit
- Kuring
- ํ๋ก๊ทธ๋๋จธ์ค
- Swfit
- combine
- raywenderlich
- ios
- arkit
- visionOS
- SwiftUI
- BFS
- SnapKit
- Flutter
- CollectionView
- UIKit
- swift
- Today
- Total
๋ชฉ๋กapple (146)
lgvv98
[TCA] Effect #6 (WebSocket) ๋ชฉ์ฐจ - ์ด๋ฒ์ ํ ์ค์ต์ ๋ํ ์ค๋ช - ์น์์ผ ๊ฐ๋ ์ ๋ํด์ ์ค๋ช ์ ์๋ต - ๋์ ์ด์ ์์ ์์์ ์น์์ผ๊ณผ ์ฐ๊ด์ง์ด ์๊ฐํด๋ณด๊ธฐ - TCA WebScoket ์์ # ์ด๋ฒ์ ํ ์ค์ต์ ๋ํ ์ค๋ช URLsession์ ์น์์ผ์ฉ API๋ฅผ ์ํ ๊ฐ๋จํ Wrapper๋ฅผ ๋ง๋ค์ด ์์ผ ์๋ฒ์ ์ ์ํ์ฌ ํ ์คํธํ ํ ๋ฉ์์ง๋ฅผ ์ ์ก ํ ์์ผ ์๋ฒ๋ ์ฆ์ ๋ฉ์์ง๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ํ์ . - ๋์ ์ด์ ์์ ์์์ ์น์์ผ๊ณผ ์ฐ๊ด์ง์ด ์๊ฐํด๋ณด๊ธฐ ๋ด๊ฐ ๊ฐ๋ฐ์ ์ฒ์ ๊ณต๋ถํ ๋น์์๋ ์น์์ผ์ ์ด๋ ๊ฒ ๋ง์ด ๋ค๋ฃจ๋ฆฌ๋ผ๊ณ ์๊ฐํ์ง ๋ชปํ๋๋ฐ, ๋ฉ์ธ์ผ๋ก ์ฌ์ฉํ๊ณ ์์. ์ฒ์ ์ด๋ก ์ด ์๋ ์น์์ผ์ ์ ํ๊ฒ ๋ ๊ฒ์ Kuringํ๋ก์ ํธ์์ ๊ฒ์ํํธ๋ฅผ ๊ตฌํํ๋ฉด์ ์ฒ์ ์๊ฒ ๋์๋๋ฐ, ๋น์์๋ StarS..
[TCA] Effect #5 (Timers) ๋ชฉ์ฐจ - Timers ์ฃผ์ ์ ๋ํด์ ๊ฐ๋จํ ์์๋ณด๊ธฐ - Timers์ ๊ด๋ จํ ์์ # Timers ์ฃผ์ ์ ๋ํด์ ๊ฐ๋จํ ์์๋ณด๊ธฐ @Dependency(\.continuousClock) var clock ์์ ๋ํ๋์ ์์ ์ฒ๋ผ ์ฌ์ฉํ ์ ์์ Swift Clocks ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ Helper์ธ ํด๋ญ์ .timer ๋ฉ์๋๋ฅผ ์ฌ์ฉ ๋น๋๊ธฐ ์ฝ๋๋ก ์๊ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ `AsyncSequence` ์นํ์ ์ธ API๋ฅผ ์ ๊ณต # Timers์ ๊ด๋ จํ ์์ // MARK: - Feature domain struct Timers: Reducer { struct State: Equatable { var isTimerActive = false var secondsElaps..
[TCA] Effect #4 (Refreshable) ๋ชฉ์ฐจ - Refreshable์ ๋ํ - Refreshable์ ์ฌ์ฉํ๋ ์์ # Refreshable์ ๋ํ ์ด๋ฒ์๋ List๋ฅผ ๋ฆฌํ๋ ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์ ์ด๋ฒ์๋ ๋ฒํผ์ ํด๋ฆญํด์ API ์ฝํ๋๊ฒ ์๋๋ผ ๋ฆฌํ๋ ์๋ฅผ ํตํด API๋ฅผ ์ฝ ํ ์์ ์ด๋ค. ํน์ด์ ์ผ๋ก๋ viewStore.send(..., animation: ) ์ผ๋ก animation์ ๊ฑด๋ค์ฃผ์ด ๋ณผ ์์ ! # Refreshable์ ์ฌ์ฉํ๋ ์์ // MARK: - Feature domain struct Refreshable: Reducer { struct State: Equatable { var count = 0 var fact: String? } enum Action: Equata..
[TCA] Effect #1 (LongLiving) ๋ชฉ์ฐจ - LongLiving์ ๋ํ ์ค๋ช - Effect LongLiving ์์ ์ดํด๋ณด๊ธฐ # LongLiving์ ๋ํ ์ค๋ช ์ด๋ฒ์๋ NotificationCenter์ ์๋ฆผ๋ค์ฒ๋ผ effect์ ๋ผ์ดํ์ฌ์ดํด์ด ๊ธด ๊ฒ๋ค์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ทธ๊ฒ๋ค์ View์ ๋ผ์ดํ ์ฌ์ดํด๊ณผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ณ ์ ํจ. ์ด๋ฒ์๋ ์คํฌ๋ฆฐ์ท์ ์ฌ๋ฌ๋ฒ ์ฐ์ผ๋ฉด์ UI์ ์นด์ดํธ๊ฐ ๋ช๋ฒ์ด๋ ๋ฐ์ํ๋์ง ๊ด์ฐฐํ๋ ์์ ๊ทธ๋ฐ ๋ค์ ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ์ด๋ํ์ฌ ์คํฌ๋ฆฐ์ท์ ์ดฌ์ํ ํ ์ด ํ๋ฉด์์ ์คํฌ๋ฆฐ์ท์ด *not* ์นด์ดํธ๋๋์ง ํ์ธํ๊ณ , ํด๋น ํ๋ฉด์ ๋ ๋๋ฉด ๋ ธํฐํผ์ผ์ด์ ํจ๊ณผ๊ฐ ์๋์ผ๋ก ์ทจ์๋๊ณ ํ๋ฉด์ ๋ค์ด๊ฐ ๋ ๋ค์ ์์. # Effect LongLiving ์์ ์ดํด๋ณด๊ธฐ import..
[TCA] Effect #1 (Cancellation) ๋ชฉ์ฐจ - ํด๋น ์์ ์ ๊ด๋ จํ ์ค๋ช - ํด๋น ์์ ์ฝ๋ # ํด๋น ์์ ์ ๊ด๋ จํ ์ค๋ช This screen demonstrates how one can cancel in-flight effects in the Composable Architecture. Use the stepper to count to a number, and then tap the "Number fact" button to fetch a random fact about that number using an API. While the API request is in-flight, you can tap "Cancel" to cancel the effect and prevent it fro..
[TCA] Effect #1 (Basics) ๋ชฉ์ฐจ - Effect๋? - Effect Basic ์์ ์ดํด๋ณด๊ธฐ - Effect๋? TCA๋ก ๋ง๋ค์ด์ง ๊ธฐ๋ฅ์ Side Effect์ ๋์ ํ ์ ์์. Side Effect๋ ์ธ๋ถ์์ ์ํ๋์ด์ผ ํ๋ ์์ ๋ค๋ก API ์์ฒญ, HTTP๋ฅผ ํตํด ์ธ๋ถ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฑ ๋ถํ์คํ๋ฉฐ ๋ณต์กํ๊ธฐ๋ ํจ. - ์์ด ์ฉ์ด ์ ๋ฆฌ NB: nota bene๋ผ๋ ๋ผํด์ด๋ก ์ฃผ์, ์ ์๋ผ๋ ์๋ฏธ - Effect Basic ์์ ์ดํด๋ณด๊ธฐ import ComposableArchitecture import SwiftUI // MARK: - Feature domain struct EffectsBasics: Reducer { struct State: Equatable { var count = 0..