์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- arkit
- Swfit
- realm
- UIKit
- node.js
- ๋ฐฑ์ค
- RxSwift
- Kuring
- TCA
- CollectionView
- BFS
- SnapKit
- designpattern
- combine
- ํ๋ก๊ทธ๋๋จธ์ค
- reactorkit
- raywenderlich
- Xcode
- visionOS
- Flutter
- rxcocoa
- BOJ
- XCTest
- ios
- ํจ์คํธ์บ ํผ์ค
- Lv2
- SwiftUI
- swift
- tableView
- MVVM
- Today
- Total
๋ชฉ๋กcombine (10)
lgvv98
[SwiftUI] keyboard ์ด๋ฒคํธ ํธ๋ค๋ง ์ฑ ๊ฐ๋ฐ์ ์์ด์ ํค๋ณด๋ ์ํ์ ๋ฐ๋ผ์ ๋ทฐ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค์ ๋์ด๊ฐ ์กฐ์ ๋๋ ๋ฑ ํค๋ณด๋์ ๊ด๋ จํด์๋ ๊ฝค๋ ๊น๋ค๋กญ๋ค. UIKit์ ์ฌ์ฉํ๋ค๋ฉด - iOS 15 ์ด์: keyboardLayoutGuide๋ฅผ ํ์ฉํ์ฌ ๋ ์ด์์์ ์ก๊ธฐ - iOS 14 ์ดํ: ํค๋ณด๋์ ์ํ์ ๋ฐ๋ผ ํค๋ณด๋์ ๋์ด๋ฅผ ๊ณ์ฐํด์ ๋ทฐ์ ์์น๋ฅผ ์กฐ์ view.keyboardLayoutGuide SwiftUI ์ฌ์ฉ - iOS 15 ์ด์: @FocusState ํ์ฉ - iOS 14 ์ดํ: NotificationCenter์ Combine์ ํ์ฉ ์ํ์ฝ๋ ํค๋ณด๋ ์ํ๋ฅผ ์ฝ์ ์ ์๋๋ก ์๋ ์ฝ๋๋ฅผ ์์ฑ protocol KeyboardReadable { var keyboardPublisher: Any..
[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..
Networking(feat. RestAPI) Combine์ ํ์ฉํด์ ์ฝ๊ฒ ์๋ฒ์ ํต์ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด ๊ธ์ ์ ์ผ ์๋ ๋ถ๋ถ์์๋ MVVM์ ๋ํ ๊ณ ์ฐฐ๋ ๋ค์ด ์์ต๋๋ค. ๋์ด๋๋ ์ด 3๊ฐ์ง๋ก ๋๋์ด ์์ต๋๋ค. ํ์ผ์ ํ์ธํด์ฃผ์ธ์! ์ด ํฌ์คํ ์์๋ Refactoring(์)๊ณผ Advanced Model์ ๋ํด์๋ง ์ค๋ช ํฉ๋๋ค. ์์ธํ ์ฝ๋๋ ์๋ ์ฒจ๋ถ ํ์ผ์ ํ์ธํด์ฃผ์ธ์!!! ๐ฅ ๋ชฉ์ฐจ ๐ฅ 1. Refactoring (์) 2. MVVM์ ๋ํ ๊ณ ์ฐฐ(Combine ํ๋ฌ์ฐจ,, 2022.06.11) ๐ ๋ชจ๋ธ // // UserModel.swift // CombineNetworking // // Created by Hamlit Jason on 2022/06/10. // // let user = try?..