combine
-
Debouncer ๋ง๋ค๊ธฐ (No Combine, No RxSwift)Swift 2023. 10. 9. 02:53
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ ๋ก์ง์์ ์์ฃผ ๊ฐ๋จํ ์ฌ์ฉํ ์ ์๋ Debouncer๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค ๐๐ป No Combine, No RxSwift Combine์ด๋ RxSwift์์ ํํ ์ ํ ์ ์๋ debounce์ ์ฌ์ฉ๊ณผ ํผ๋ํ ์ ์์ด์ ํ๋ฒ ์ง๊ณ ๋์ด๊ฐ๋ณผ๊ป์. ์์๋ก ์ ํ ๊ณต์๋ฌธ์์ Combine ์ฝ๋๋ฅผ ์กฐ๊ธ ๋ ์๊ธฐ ์ฝ๊ฒ ๋ณ๊ฒฝํ์ฌ ๊ฐ์ ธ์๋ณด๊ฒ ์ต๋๋ค. let bounces:[(String,TimeInterval)] = [ ("Black", 0), ("Green", 0.25), // 0.25s interval since last index ("Red", 1), // 0.75s interval since last index ("Blue", 1.25), // 0.25s inter..
-
SwiftUI์์ Notification ์ฌ์ฉํ๊ธฐSwiftUI 2023. 8. 17. 12:25
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐ ์ด๋ฒ ํฌ์คํ ์์๋ SwiftUI์์ Notification์ ๋ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค ๐๐ป ํํ, ๋ค๋ฅธ ๋ทฐ์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ญ์ ์ผ๋ก NotificationCenter๋ฅผ ํตํด Notification์ ์๊ณ ํด๋น ๋ ธํฐํผ์ผ์ด์ ์ ์์ ํ๊ณ ์๋ ๋ค๋ฅธ ๋ทฐ๋ค์์๋ ์ ์ ํ ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ํด์ค ์ ์๊ณ ๋ ๊ทธ๋ด๋ ๋ง์ด ์ฌ์ฉํ์ฃ ! SwiftUI์์ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ตฌํํด๋ณด๊ณ ์์๊ฐ๋ณด์์ฃ ๐บ๐ป ์ฐ์ ๋๊ฐ์ง ๋ฐฉ์์ ์ฌ์ฉํด๋ณด๋ คํด์! ๊ฐ์ฅ ๋จผ์ SwiftUI์์ onRecieve๋ฅผ ํตํด ์์ ๋ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. onRecieve ์ด์ฉํ๊ธฐ ์ฝ๋๊ฐ ๊ฐ๋จํ๋ ๋ณ๋ ํ์ผ์ ์ชผ๊ฐ์ง ์๊ณ ์ฝ๊ฒ ํ ๋ทฐ์์ ๋ณด๊ฒ ์ต๋๋ค. import SwiftUI struct Conten..
-
Swift Concurrency - Async sequence & streamConcurrency 2023. 3. 9. 09:10
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ ๋น๋๊ธฐ ์ํ์ค์ ์คํธ๋ฆผ์ ๋ํด ์์๋ณด๊ณ ๊ธฐ์กด ์ปด๋ฐ์ธ ์ฝ๋์ ์ด๋ป๊ฒ ๋ น์ฌ๋ด๋์ง ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐๐ป ์ผ๋ฐ์ ์ผ๋ก for๋ฌธ ๊ฐ์ด ๋ฃจํ๋ฅผ ๋๋ฉฐ Swift ์ปฌ๋ ์ ์ ๋ฐ๋ณตํ ๋ ๋ฐ๋ณตํ ์ฝ๋์ ์ ๋ฌ๋ ์์๋ฅผ ๊ฒฐ์ ํ๋๋ฐ์๋ ๋๊ฐ์ง ํต์ฌ ์์๊ฐ ์์ต๋๋ค. sequence์ iteratorโญ๏ธ ๋ญ๊ฐ ํ๋ฒ์ฉ์ ๋ค ๋ค์ด๋ดค๊ณ , ์ด ์ด๋์ ๋ดค๋๋ฐ? ์ถ์ผ์ค๊ฑฐ์์! ์๋ฅผ๋ค๋ฉด Swift์ array ํ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก sequence ํ๋กํ ์ฝ์ ์ค์ํ๋ฉฐ iterator ํ์ ์ผ๋ก IndexingIterator๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฐ๋ฆฌ๋ Swift ์ฝ๋ ์์ฑ ์ ์ํ์ค์ ์ง์ ์ํธ ์์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋งค์ฐ ๋ง์ง๋ง for ๋ฃจํ๋ฅผ ์ฌ์ฉํ ๋๋ง๋ค Swift ์ธ์ด ์์ฒด๊ฐ ์ด๋ฌํ ์ธ์คํด์ค๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ฃผ๊ธฐ ๋๋ฌธ์..
-
Combine - ConnectablePublisherCombine 2022. 3. 28. 20:20
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข ์ด๋ฒ ํฌ์คํ ์์๋ ์ ์๊ฐ์์ multicast์ share๋ฅผ ํ์ตํ๋ฉด์ ์ด์ง ์ค์น๋ฏ์ด ๋งํ๊ณ ๊ฐ ConnectablePublisher์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐๐ป ์ฐ์ ๋ง์ฝ ์ด์ ํฌ์คํ ์ธ multicast์ share๋ฅผ ๋ชป๋ณด์ จ๋ค๋ฉด ๋ณด๊ณ ์ค์๋๊ฑธ ์ถ์ฒํด์! https://green1229.tistory.com/230 Combine - multicast / share ์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข ์ด๋ฒ ํฌ์คํ ์์๋ ๋ค์ ์ปด๋ฐ์ธ ์ธ๊ณ๋ก ๋์์ multicast์ share์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค๐๐ป ์ฐ์ ์ด๋ค๊ฑธ ํ๋ ์น๊ตฌ๋ค์ด๋!? ํ๋์ Publisher๋ก ๋ถํฐ ๊ตฌ๋ ์ ํ ์ฌ๋ฌ Subs green1229.tistory.com ์ด์ ํฌ์คํ ์์ ์ธ๊ธํ ConnectablePublisher์ ๋ํ ..
-
Combine - multicast / shareCombine 2022. 3. 24. 20:01
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข ์ด๋ฒ ํฌ์คํ ์์๋ ๋ค์ ์ปด๋ฐ์ธ ์ธ๊ณ๋ก ๋์์ multicast์ share์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค๐๐ป ์ฐ์ ์ด๋ค๊ฑธ ํ๋ ์น๊ตฌ๋ค์ด๋!? ํ๋์ Publisher๋ก ๋ถํฐ ๊ตฌ๋ ์ ํ ์ฌ๋ฌ Subscriber๋ค์๊ฒ ๊ฐ๊ฐ ์ด๋ฒคํธ๋ฅผ ์ฌ๋ฌ๋ฒ ๋ฐํํ๋๊ฒ ์๋๋ผ ํ๋์ ์์์ ํ๋ฒ์ ์ด๋ฒคํธ๋ง ๋ฐ์์์ผ์ค ์ ์๋๋ก ํด์ฃผ๋ ์น๊ตฌ๋ค์ ๋๋ค๐ ์ด๋ฒ๊ฑด ๊ฝค๋ ๊ฐ๋จํ ์ดํด๋ ์ ์์ผ๋ ํ๋ฒ ํด๋ณด์์ฃ ! multicast ๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด ํด๋ก์ ๋ฅผ ์ ์ฉํด ๊ตฌ๋ ์์๊ฒ ์์๋ฅผ ์ ๋ฌํ๋ subject๋ฅผ ๋ง๋ค์ด์ค๋ค๊ณ ํด์. ์ญ์ ๊ณต์๋ฌธ์์ ์ ์๋ ์ด๋ ค์...๐คฏ ์ฐ์ ๊ทธ๋ฌ๋ ค๋~ ํ๊ณ ์ ์๋ ์ฝ๋๋ฅผ ๋ณด์์ฃ ! func multicast(_ createSubject: @escaping () -> S) -> Publishers.Mul..
-
SwiftUI - @State / @Binding / @StateObject / @EnvironmentObjectSwiftUI 2022. 3. 21. 20:15
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข ์ด๋ฒ ํฌ์คํ ์์๋ ์ ํฌ์คํ ์ ์ด์ด SwiftUI์์ ๊ตฌ์กฐ์ฒด ๋ด๋ถ์์ ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ๋ฐ์ํด์ฃผ๊ฑฐ๋ ์ ์ญ์ ์ผ๋ก ๊ฐ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ํด์ฃผ๋ ๊ทธ๋ฐ ์น๊ตฌ๋ค์ธ ํ์ดํ์ ์ธ์น๊ตฌ ์ฆ, @State, @Binding, @StateObject, @EnvironmentObject์ ๋ํด์ ํ์ตํด๋ณด๊ฒ ์๋๋ค๐๐ป ์ฐ์ ํ๋์ฉ ์ฐจ๋ก๋๋ก ์งํํด๋ณด๊ฒ ์ต๋๋ค๐ @State ์ ์๋ฅผ ๋จผ์ ๋ณด๋ฉด, SwiftUI์์ ๊ฐ์ ์ฝ๊ณ ์ธ ์ ์๋ ์ ํ์ ์ด๋ ธํ ์ด์ ์ ๋๋ค. @frozen @propertyWrapper struct State ์ญ์ propertyWrapper์ด๊ณ ๊ตฌ์กฐ์ฒด์ ๋๋ค. SwiftUI์์ ์ฐ์ ๋ทฐ๋ ๊ตฌ์กฐ์ฒด์ ๋๋ค. ์ฆ, ๋ด๋ถ ๊ฐ์ ๋ณ๊ฒฝํด์ค ์ ์๋๋ฐ ์ด @State๋ฅผ ์ด์ฉํด ๋ณ๊ฒฝํด์ค ์ ์์ต๋๋ค. ๋ํ ๊ตฌ์กฐ์ฒด์ด๊ธฐ..
-
Combine - ObservableObject / @Published / @ObservedObjectCombine 2022. 3. 17. 21:00
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข ์ด๋ฒ ํฌ์คํ ์์๋ ObservableObject๋ผ๋ ํ๋กํ ์ฝ์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐๐ป ์ถ๊ฐ๋ก ์ด์ด์ ธ์ @Published์ @ObservedObject๋ ๋ณด์์ฃ ! ์์ฆ ๊ฐ์ธ์ ์ผ๋ก ๋ง์ด ๋ฐ๋น ์ ธ์ ๋ธ๋ก๊ทธ๋ฅผ ์ํํ๊ฒ ๋ ๊ฒ ๊ฐ์.. ๋ง์ ์์ ๊ณต๋ถํ๊ณ ํฌ์คํ ํ๋๊ฒ๋ณด๋ค ์งง๊ฒ ํ์ตํ๊ณ ํฌ์คํ ํ๋ฉด์ ๊พธ์คํจ์ ์์ง ์๋ ์ ๋ต์ผ๋ก ๋น๋ถ๊ฐ ๊ฐ๋ คํฉ๋๋ค! (์๊ทธ๋ฌ๋ฉด ์ด๋ ์๊ฐ ๋๋ฒ๋ฆด๊ฒ ๊ฐ์....) ๊ทธ๋์ ์ด๋ฒ์ ์ค๋นํ ์ฃผ์ ๋ ์ด์ฌ๋ถํฐ ์ฐพ์! ๋๋์ผ๋ก ์ ๋ฒ์ Combine์ ๋ํ์ ๊ฐ๋ ๋ค์ ๊ณต๋ถํ๋ฉด์ ์ฐ๊ฒฐ๋์ด ObservableObject๋ผ๋ ์ฃผ์ ๋ฅผ ์ ์ ํ๊ฒ ๋์๋ค์ใ ใ ๊ทธ๋ผ ์ ์ํ๊ฒ ํ์ตํ๊ณ ์น๊ณ ๋น ์ ธ ๋ด ์๋ค๐ ObservableObject? ๊ณต์๋ฌธ์์ ์ ์๋ ๊ฐ์ฒด ๋ณ๊ฒฝ ์ ๋ฐฉ์ถํ๋ ๊ฒ์์๊ฐ ์..
-
Combine - CancellableCombine 2022. 3. 10. 20:00
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข ์ด๋ฒ ํฌ์คํ ์์๋ ์์๋ณด๊ธฐ๋กํ Combine์ ํ์์์ ์ค ๋ง์ง๋ง์ธ Cancellable์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค๐๐ป Cancellable? Combine์ Cancellable์ ๊ณต์๋ฌธ์์์ ์ฐพ์๋ณด๋ฉด ์ฐ์ ํ๋กํ ์ฝ์ ๋๋ค. protocol Cancellable ๊ทธ๋ผ ์ด๋ค๊ฑธ ํ๋๋? ํ์ฌ์ ์ด๋ฒคํธ ๋ฐ ์์ ์ ๋ํด ์ทจ์์ ๋ํด ์ง์ํ๋ ๊ทธ๋๋ก์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค. cancel() ๋ฉ์๋๋ฅผ ํธ์ถํจ์ผ๋ก ๋ฆฌ์์ค์ ๋ํด ํด์ ํด์ค๋๋ค. ํ์ด๋จธ, ๋คํธ์ํฌ ์ก์ธ์ค, ๋์คํฌI/O์ ๊ฐ์ ์ฌ์ด๋ ์ดํํธ ๋ฐ์์ ์ค์งํด์ค๋๋ค. ๊ทธ๋ผ ์ฐ์ ๊ฐ์ฅ ์ค์ํ ๋ฉ์๋์ธ cancel()์ ๋ณด์์ฃ ! cancle() ์์ ์ ๋ํ ์ทจ์ ๋ฉ์๋๋ก ์๋์ ๊ฐ์ ๊ฐ๋จํ ์ ์๋ฅผ ๊ฐ์ง๋๋ค. func cancel() cancel() ํธ..