๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ
-
[Swift] Understanding Swift Concurrency’s AsyncStreamSwift 2023. 8. 17. 09:25
์ด์ ๊ธ์์ ๊ธฐ์กด์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ async/await์ ํ์ฉํ๋ Swift์ ์๋ก์ด ๋์์ฑ ์์คํ ์ผ๋ก ์ฐ๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ์ต๋๋ค. ์ฌ๊ธฐ์ ์ค๋ช ํ ๋ฉ์ปค๋์ฆ์ ์ฝ๋๊ฐ ๋จ์ผ ๊ฐ์ผ๋ก ๋ชจ๋ธ๋งํ ์ ์๋ ๋จ์ผ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ ์ฝ๋์ ์ ํฉํฉ๋๋ค. ๋ค์ด๋ก๋ ์งํ๋ฅ , ์ฌ์ฉ์์ ํ์ฌ ์์น์ ๊ฐ์ด ์๊ฐ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ, ๋น๋๊ธฐ for ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณตํ ์ ์๋ AsyncSequence ๊ฐ์ฒด๋ก ๋ชจ๋ธ๋งํ ์ ์์ต๋๋ค. ์ด์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์์ ๋ก URL์ lines ์์ฑ์ ๋ค ์ ์์ต๋๋ค. let url = URL(string: "")! for try await line in url.lines { // use line } ๊ทธ๋ ๋ค๋ฉด ์ปค์คํ ๋น๋๊ธฐ ์ํ์ค๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์ผ๊น์?..
-
[Swift] Wrapping existing asynchronous code in async/await in SwiftSwift 2023. 8. 17. 09:21
Swift์ async/await ๊ธฐ๋ฅ์ iOS 13 ๋ฐ ์ดํ ๋ฒ์ ์์ ๋น๋๊ธฐ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๋ ๋๋ผ์ด ๋ฐฉ๋ฒ์ ๋๋ค. ์ ํ๋ก์ ํธ์์๋ ์ด๋ก ์ธํด ๋ ํํ๋ ฅ์ด ์๊ณ ๊ฐ๋ ์ฑ์ด ์ข์ผ๋ฉฐ ๋๋ฒ๊น ํ๊ธฐ ์ฌ์ด ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋๊ธฐ ์ฝ๋์ ๋งค์ฐ ์ ์ฌํ๊ฒ ์ฝํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ async/await๋ฅผ ์ฑํํ๋ ๊ฒ์ ํจ์์ ์๋ฃ ํธ๋ค๋ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋น๋๊ธฐ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์๋นํ ๋ณ๊ฒฝํด์ผ ํ ์๋ ์์ต๋๋ค. ๋คํํ๋, ๊ธฐ์กด์ ์ฝ๋ฐฑ ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์๋ก์ด async/await ์ธ๊ณ๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํด Swift์ ๋ด์ฅ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ ๊ธฐ์กด์ ์ฝ๋ฐฑ ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ฝ๋๋ฅผ async ๋ฐ async/await์ ํจ๊ป ์๋ํ๋ ํจ์๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ ์ค ํ๋..
-
[TCA] Sharing logic with actionsTCA 2023. 8. 14. 10:57
์ก์ ์ ์ฌ์ฉํ์ฌ ๋ฆฌ๋์์ ์ฌ๋ฌ ๋ถ๋ถ์์ ๋ก์ง์ ๊ณต์ ํ๋ ์ผ๋ฐ์ ์ธ ํจํด์ด ์๋๋ฐ, ์ด๋ ๋นํจ์จ์ ์ธ ํจํด์ด๋ค. ์ก์ ์ ์ ์กํ๋ ๊ฒ์ ํด๋์ค์์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ๋งํผ ๊ฐ๋ฒผ์ด ์์ ์ด ์๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ก์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ ์ด์ด๋ฅผ ํต๊ณผํ๋ฉฐ ๊ฐ ๋ ์ด์ด๋ง๋ค ๋ฆฌ๋์๊ฐ ์ก์ ์ ๊ฐ๋ก์ฑ๊ณ ์ฌํด์ํ ์ ์๋ค. ๋์ , Reducer๋ฅผ ์ค์ํ๋ฉด์ ๊ฐ๋จํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ง์ ๊ณต์ ํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค. ์ด ๋ฉ์๋๋ ๋ณ์ด๋ฅผ ํด์ผํ ๊ฒฝ์ฐ, State๋ฅผ inout ์ธ์๋ก ๋ฐ์์ ์ฌ์ฉํ ์ ์๊ณ , Effect์ ๋ฐํํ ์ ์๋ค. ์ด๋ฅผ ํตํด ๋ถํ์ํ ์ก์ ์ ์ ์กํ๋ ๋น์ฉ์ ๋ฐ์์ํค์ง ์๊ณ ๋ก์ง์ ๊ณต์ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํผ์ณ์ 3๊ฐ์ UI ์ปดํฌ๋ํธ๊ฐ ์๊ณ ์ด๋ค ์ปดํฌ๋ํธ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด๋น ์ํ ํ๋๋ฅผ ์ ๋ฐ์ดํธํ..
-
[SwiftUI] clipShapeSwiftUI 2023. 8. 7. 10:56
๋ทฐ์ ๋ํ ํด๋ฆฌํ ๋ชจ์์ ์ค์ ํ๋ค. func clipShape( _ shape: S, style: FillStyle = FillStyle() ) -> some View where S : Shape shape ํ๋ผ๋ฏธํฐ๋ ๋ทฐ์ ์ฌ์ฉํ ํด๋ฆฌํ ๋ชจ์์ผ๋ก, ๊ฐ๋ก ์ธ๋ก ๋น์จ์ ์ ์งํ๋ฉด์ ๋ทฐ์ ํ๋ ์์ ์ฑ์ด๋ค. shape ํ๋ผ๋ฏธํฐ๋ Shape ํ๋กํ ์ฝ์ ์ฑํํ๋ค. style ํ๋ผ๋ฏธํฐ๋ ๋ชจ์์ ๋์คํฐํํ ๋ ์ฌ์ฉํ fill ์คํ์ผ๋ก, ๊ธฐ๋ณธ๊ฐ์ด ์กด์ฌํ๋ค. ์ฐธ๊ณ ๋ก FillStyle์ ๋ฒกํฐ ๋ํ์ ๋์คํฐํํ๊ธฐ ์ํ ์คํ์ผ๋ก, ๊ตฌ์กฐ์ฒด์ด๋ค. ์ฌ๊ธฐ์ ๋์คํฐํ๋, ๊ทธ๋ํฝ์ ๋ ๋๋งํ๊ธฐ ์ํ ๋ฐฉ์ ์ค ํ๋๋ก, ํ๋ฉด์ ์ค๋ธ์ ํธ๋ฅผ ํฝ์ ๋ก ๋งคํํ๋ ๊ฒ์ ์๋ฏธํ๋ค. style์ ์ฌ์ฉํด์ ๋ํ์ ๋์คํฐํ๋ฅผ ์ ์ํ๊ณ ๋ทฐ์ shape๋ฅผ ํด๋ฆฌํํ๋ค..
-
[SwiftUI] DragGestureiOS 2023. 8. 4. 14:17
DragGesture() .updating($translation){ value, state, _ in print("๐state (ํ์ฌ ์ํ) ", state, " ๐value.translation.height (์ ๋ฐ์ดํธ ๋ ์ํ)", value.translation.height) state = translation } } DragGesture๋ ๋๋๊ทธ ์ด๋ฒคํธ ์ํ์ค๊ฐ ๋ณ๊ฒฝ๋ ๋ ์ก์ ์ ํธ์ถํ๋ ๋๋๊ทธ ๋ชจ์ ์ด๋ค. ๋ทฐ์์ ๋๋๊ทธ ์ ์ค์ฒ๋ฅผ ์ธ์ํ๋ ค๋ฉด ์ ์ค์ฒ๋ฅผ ๋ง๋ค๊ณ ๊ตฌ์ฑํ ๋ค์, gesture(_:including:) ๋ชจ๋ํ์ด์ด๋ฅผ ์ฌ์ฉํด์ ๋ทฐ์ ์ถ๊ฐํ๋ค. ๋ค์์ ์์ ๋๋๊ทธ ์ ์ค์ฒ๋ฅผ ์ถ๊ฐํ๊ณ , ์ฌ์ฉ์๊ฐ ๋๋๊ทธ ์ ์ค์ฒ๋ฅผ ์ํํ๋ ๋์ ์์ ์์์ ๋ณ๊ฒฝํ๋ ์ฝ๋๋ค. struct DragGestureView: V..
-
[SwiftUI] ๋๋ฐ์ด์ค์ width, height ๊ตฌํ๊ธฐiOS 2023. 8. 3. 14:18
SwiftUI์์ ๋๋ฐ์ด์ค์ ์ฌ์ด์ฆ (width, height)๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค. 1. GeometryReader ์ฌ์ฉํ๊ธฐ import SwiftUI struct ContentView: View { var body: some View { GeometryReader { geometry in ZStack { Color .yellow .frame( width: geometry.size.width, height: geometry.size.height ) VStack { Text("Width \(geometry.size.width)") Text("Height \(geometry.size.height)") } } } } } struct ContentView_Previews: PreviewProvide..