์ ์ฒด ๊ธ
-
DarkModeiOS 2022. 3. 31. 20:51
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข ์ด๋ฒ ํฌ์คํ ์์๋ ๋คํฌ๋ชจ๋์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค๐๐ป ๋คํฌ๋ชจ๋? ๋คํฌ๋ชจ๋๋ iOS 13 ์ด์์์ ํํ๋ค ๋งํ๋ ์ค์ ์์ ๋๋ฐ์ด์ค ์์ฒด๋ฅผ ๋คํฌ๋ชจ๋๋ก ์ค์ ํ๋ฉด ์ ์ฒด์ ์ผ๋ก ์ด๋์ด ํ ๋ง์ ์์คํ ์ ์ฑํํ๋๋ก ํ ์ ์์ต๋๋ค. ํน์ง์ ์ด๋์์ง๋๋งํผ ๋ ๋ง์ ์๋๊ฐ์ ์ฌ์ฉํด ์ ๊ฒฝ ์ปจํ ์ธ ๋ค์ ๋ ๋ถ๊ฐ์์ผ์ค๋๋ค. ์ฑ์์ ๋คํฌ/๋ผ์ดํธ ๋ชจ๋ ๋์ ์ ์ฃผ์์ 1. ์ฑ๋ ๋คํฌ๋ชจ๋์ ๋ฐ๋ผ ์ ๋ฐ์ํด์ผํฉ๋๋ค. 2. ๋ผ์ดํธ/๋คํฌ ๋ชจ๋์์ ๋์์ธ์ด ์๋ํ๋ฐ์ ๊ฐ์ด ์ ์์ ์ธ์ง ํ ์คํธํด์ผํฉ๋๋ค. 3. ๋๋น ๋ฐ ํฌ๋ช ๋ ๋ฑ ์ ๊ทผ์ฑ ์ค์ ์ ์กฐ์ ํ์๋์๋ ๋คํฌ๋ชจ๋์์ ๊ฐ๋ ์ฑ์ด ์ข์์ง ํ์ธํด์ผํฉ๋๋ค. ๋คํฌ๋ชจ๋ ์์ ๊ด๋ จ ๋คํฌ๋ชจ๋์ ์์์ ์ ํํ ๋๋ ์ค์ํ ์ฌํญ๋ค์ด ์กฐ๊ธ ์์ต๋๋ค. 1. ์์คํ ๋ฐฐ๊ฒฝ์ ์ ํธ - ๋คํฌ๋ชจ๋๋ ..
-
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? ๊ณต์๋ฌธ์์ ์ ์๋ ๊ฐ์ฒด ๋ณ๊ฒฝ ์ ๋ฐฉ์ถํ๋ ๊ฒ์์๊ฐ ์..
-
UIFeedbackGeneratoriOS 2022. 3. 14. 10:44
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข ์ด๋ฒ ํฌ์คํ ์์๋ UIFeedbackGenerator์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐๐ป ์ฐ์ , ์ ์ด๊ฑธ ํ์ตํ๊ฒ ๋์๋์ง ์๊ธฐ๋ฅผ ํด๋ณผ๊น ํฉ๋๋ค. ํ๋ก์ ํธ ์ํ์ค์ ์ด๋ค ์ ์ ์ ์ก์ ์ ์ํด์ (QR์ด๋ ๋ฐ์ฝ๋๋ฅผ ์ฐ๋๋ค๋๊ฐ ํ๋) ๋๋ฐ์ด์ค์ ์ง๋ ํน์ ์ฌ์ด๋๋ฅผ ๋ด์ฃผ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์์์์? ๊ทธ๋ด๋ ์ด๋ ํ ์ก์ ์ ์ด๋ป๊ฒ ๊ตฌํํด์ฃผ๋๊ฒ ๋ฒ ์คํธ์ผ์ง ์ฐพ๋ค๊ฐ ์ UIFeedbackGenerator๋ฅผ ๋ฐ๊ฒฌํ๊ณ ํ์ตํ๊ฒ ๋์์ด์! ์ฌ์ฉ๋ฒ๋ ๋๊ฒ ๋จ์ํ๊ณ ๊ฐ๋ ๋ ๊ฐ๋จํด์ ๊ธ๋ฐฉ ์ ์ฉํ ์ ์์๊ณ ์ด์ ๋ํด ๋จ์ํ ์ ๋ UINotificationFeedbackGenerator๋ง ์ฌ์ฉํ์๋๋ฐ ์ด๊ฑฐ ๋ง๊ณ ๋ UIFeedbackGenerator์ ์์ ๋ฐ๋ ๋ค๋ฅธ ์น๊ตฌ๋ค๋ ์๊ธธ๋..! ์ด์ฐธ์ ํ๋ฒ ๊ฐ๋ตํ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ..
-
Combine - CancellableCombine 2022. 3. 10. 20:00
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข์ด๋ฒ ํฌ์คํ ์์๋ ์์๋ณด๊ธฐ๋กํ Combine์ ํ์์์ ์ค ๋ง์ง๋ง์ธ Cancellable์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค๐๐ป Cancellable?Combine์ Cancellable์ ๊ณต์๋ฌธ์์์ ์ฐพ์๋ณด๋ฉด ์ฐ์ ํ๋กํ ์ฝ์ ๋๋ค.protocol Cancellable๊ทธ๋ผ ์ด๋ค๊ฑธ ํ๋๋?ํ์ฌ์ ์ด๋ฒคํธ ๋ฐ ์์ ์ ๋ํด ์ทจ์์ ๋ํด ์ง์ํ๋ ๊ทธ๋๋ก์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค.cancel() ๋ฉ์๋๋ฅผ ํธ์ถํจ์ผ๋ก ๋ฆฌ์์ค์ ๋ํด ํด์ ํด์ค๋๋ค.ํ์ด๋จธ, ๋คํธ์ํฌ ์ก์ธ์ค, ๋์คํฌI/O์ ๊ฐ์ ์ฌ์ด๋ ์ดํํธ ๋ฐ์์ ์ค์งํด์ค๋๋ค. ๊ทธ๋ผ ์ฐ์ ๊ฐ์ฅ ์ค์ํ ๋ฉ์๋์ธ cancel()์ ๋ณด์์ฃ !cancel()์์ ์ ๋ํ ์ทจ์ ๋ฉ์๋๋ก ์๋์ ๊ฐ์ ๊ฐ๋จํ ์ ์๋ฅผ ๊ฐ์ง๋๋ค.func cancel()cancel() ํธ์ถ ์ ๋ค์ด์คํธ..
-
Combine - SchedulerCombine 2022. 3. 7. 21:04
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข ์ด๋ฒ ํฌ์คํ ์์๋ Combine์์ ํฌ๊ฒ ์์๋ณด๊ธฐ๋กํ 4๋ฒ์งธ ์น๊ตฌ Scheduler์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค!๐ Scheduler? ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ํด๋ก์ ๋ฅผ ์คํํ๋ ์๊ธฐ์ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ํ๋กํ ์ฝ์ด๋ผ๊ณ ํฉ๋๋ค. protocol Scheduler ์ด๋ ๊ฒ ๊ฐ๋จํ ์ ์ธ์ ๋ณด๋ฉด ํ๋กํ ์ฝ์ ๋๋ค! ์ ์๊ฐํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ํํ ์ฌ์ฉํ๋ DispatchQueue๋ OperationQueue์ ๋์ผํ ์ญํ ์ด๋ผ๊ณ ์๊ฐ์ด ๋ญ๋๋ค. ์ฆ ๋ฉ์ธ ํน์ ์๋ธ ์ฐ๋ ๋ ์ด๋์์ ํด๋น ํด๋ก์ ๋ฅผ ์คํํด์ค์ง์ ๋ํ๊ฑฐ๋ผ๊ณ ์ดํดํ๋ฉด ์ฌ์ธ๊ฒ ๊ฐ์์. ๊ณต์๋ฌธ์์ OverView ์ ๋ฌธ์ ๊ฐ์ ธ์๋ณผ๊ป์! You can use a scheduler to execute code as soon as possible, or after ..