.onAppear { if [์กฐ๊ฑด์] { DispatchQueue.main.async { isShowView = true } } } .fullScreenCover(isPresented: $isShowView) { ChildView() } iOS 16, iOS 17์์๋ ์ ๋์ํ๋๋ฐ iOS 15์์๋ DispatchQueue.main ์ผ๋ก ํด์ค์ผ fullScreenCover๊ฐ ์ ์ ๋์ํ๋ค. ๊ตฌ์ฒด์ ์ธ ์ด์ ๋ ์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ต... ใ
ใ
์ ์ฒด ๊ธ
UIKit์ผ๋ก ๊ฐ๋ฐํ๋ค๊ฐ ํ์ฌ๋ SwiftUI๋ก ์๋น์ค ๊ฐ๋ฐํ๊ณ ์๋ Fram์ ๋๋ค SwiftUI์ Combine์ ๋ํด ์๊ฒ ๋ ๊ฒ๊ณผ ๊ธฐ์ ์ ๊ณต์ ํ๋ ๋ธ๋ก๊ทธ ์ ๋๋ค. ์ฃผ์ : ์ ์๋๊ฑฐ ๋ ์ ์ ์ ์์TCA๋ฅผ ๊ณต๋ถํ๋ค ๋ณด๋ SwiftUI ๋ฟ๋ง ์๋๋ผ UIKit์์๋ ์ฌ์ฉํ ์ ์๋ Dependency๋ฅผ ์ ๊ณตํ๊ธธ๋ ๋ฐ๋ก ๊ธ์ ์ ์ด์ผ ๊ฒ ๋๋ผ๊ตฌ์! ์์กด์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํ Swinject, Niddle, Factory ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ฐ TCA์ Depdency๋ ํ๋ฅญํ๊ณ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ณต์ ๋ฌธ์์ ๊ณต์ ๋ฒ์ญ์ ์๋ ์ฌ์ดํธ์์ ํ์ธํ ์ ์์ด์ Chapter 5. Dependency | Built with Notion 5.1 TCA์ Dependency axiomatic-fuschia-666.notion.site ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด์๋ ค๋ฉด ์ด ์ฌ์ดํธ๋ก ์ด๋ํ์๋ฉด ๋ฉ๋๋ค. Documentation pointfreeco.github.io TCA์์๋ DI(Dependency Inje..
SwiftUI TCA ์ฅ์ - State ์ ๋ณ๊ฒฝ -> UI์ ์ฆ์ ๋ฐ์ - ์ฝ๋ ์์ฑ์ด ๊ฐ๋จํจ - State ๋ณ๊ฒฝ ๋ก์ง ๊ด๋ฆฌ ์ฉ์ด - ๋ณต์กํ State์ ์ด์ ๋ฐ๋ฅธ Side Effect ์ฒ๋ฆฌ ์ฉ์ด ๋จ์ - State ๊ด๋ฆฌ๊ฐ ๋ณต์กํด ์ง์๋ก State ๋ณํ์ ๋ฐ๋ฅธ side effect๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ - ์ด๋ ค์ด ๊ตฌํ ๋์ด๋ ๐ฅ ๐ซ TCA Binding public func binding( get: @escaping (_ state: ViewState) -> Value, send valueToAction: @escaping (_ value: Value) -> ViewAction ) -> Binding { ObservedObject(wrappedValue: self) .projectedValue[get: ...
๋ ์์ ๋๋์
Int((Double(num1) / Double(num2)) * 1000) ์ซ์ ๋น๊ตํ๊ธฐ num1 == num2 ? 1 : -1 ๋ถ์์ ๋ง์
let result1 = (numer1 * denom2) + (numer2 * denom1) //32 let result2 = (denom1 * denom2) //16 let gcd = (1...min(result1, result2)).reversed().first { result1 % $0 == 0 && result2 % $0 == 0 } ?? 1 return [result1/gcd, result2/gcd] ๋ฐฐ์ด ๋ ๋ฐฐ ๋ง๋ค๊ธฐ numbers.map { $0 * 2 } ๋๋จธ์ง ๊ตฌํ๊ธฐ num1 % num2 ์ค์๊ฐ ๊ตฌํ๊ธฐ array.sorted()[ar..
๋ณ๋ค๋ฅธ ์ค๋ช
์์ด๋ ์ฌ์ฉ์๊ฐ ํด๋น UI๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง, ์ด๋ค ๊ธฐ๋ฅ์ ํฌํจํ๋์ง ์๊ฒ๋ ux๊ฐ ๊ณ ๋ ค ๋๋ฉด ์ข๊ฒ ์ง๋ง ์ค๋ช
์ด ํ์ํ ๊ฒฝ์ฐ๋ ์์ด์. ์ด ์ค๋ช
์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด TipKit์ ์ฌ์ฉํด ๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ฌ์ด๋ ํ๋ก์ ํธ๋ผ minimum target iOS 17๋ก ์ค์ ํด ๋๊ณ ํด๋ณด๊ณ ์ถ์๊ฑฐ ๋ค ํด๋ณด๊ณ ์์ด์ ์์ด ์ข์๋ผ TipKit๊ณผ ๊ฐ์ ToolTip์ด ํ์ํ๋ฐ ๋ฒ์ ์ด ์๋์๋ฉด ์๋ ๊ธ์์ ํด ํ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ ์ฐธ๊ณ ํด ๋ณด์ธ์! > 2023.11.06 - [SwiftUI] - [SwiftUI] Shape path๋ก Tooltip ๊ทธ๋ฆฌ๊ธฐ What is TipKit Tipkit์ iOS 17 ๋ถํฐ ์ฌ์ฉํ ์ ์๋ ํ๋ ์์ํฌ๋ก ์ ํ์ด ์ ๊ณตํฉ๋๋ค. ์ฑ์์ ์ฌ์ฉ์์๊ฒ ์ค๋ช
์ด๋ ์๋ด๋ฅผ ํ์ํ๋๋ฐ ์ฌ์ฉํ ์ ์์ด..
๋ ์์ ํฉ func solution(_ num1:Int, _ num2:Int) -> Int { return num1 + num2 } ๋ ์์ ์ฐจ func solution(_ num1:Int, _ num2:Int) -> Int { return num1 - num2 } func solution(_ num1: Int, _ num2: Int) -> Int { num1 - num2 } ๋ ์์ ๊ณฑ func solution(_ num1:Int, _ num2:Int) -> Int { num1 * num2 } ๋ชซ ๊ตฌํ๊ธฐ func solution(_ num1:Int, _ num2:Int) -> Int { num1 / num2 } ๋ฌธ์์ด ์ถ๋ ฅํ๊ธฐ let s1 = readLine()! print(s1) if let str..
Scope๋? ์ด์ ํํ ๋ฐฉ์ struct Scope where Child : ReducerProtocol ํ์ฌ ํํ ๋ฐฉ์ struct Scope: Reducer parent domain์ child domain์ผ๋ก ๋ณ๊ฒฝ -> ํ์ ๋๋ฉ์ธ์์ child reduce๋ฅผ ์คํ ์ํด ํฐ ๊ท๋ชจ์ feature์ ์์ ๋จ์๋ก ์ชผ๊ฐ๊ฑฐ๋ ํฉ์น ์ ์์ ์์ ๋จ์์ feature๋ ํฐ ๊ท๋ชจ์ feature ๋ณด๋ค ์ดํดํ๊ธฐ ์ฌ์ฐ๋ฉฐ test ๋ฐ ๋ชจ๋ํ๋ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌํ ์ ์์ Scope ์์ฑ @inlinable public init( state toChildState: WritableKeyPath, action toChildAction: AnyCasePath, @ReducerBuilder child: () -> Child..
์ถ์ฒ ๋ฐ ์ฐธ๊ณ ์ฌ์ดํธ https://axiomatic-fuschia-666.notion.site/Chapter-3-TCA-2-c56b24efb2154dad9ed8e54139247024 Chapter 3. TCA์ ๊ธฐ๋ณธ๊ฐ๋
(2) ์์ ์ฅ์์ ์ฐ๋ฆฌ๋ ์ฑ์ ์ํ๋ฅผ ๋ํ๋ด๋ State์ ์ด๋ฅผ ๋ณ๊ฒฝํ ์๋จ์ธ Action, ๊ทธ Action์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ํ์ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํ๋ Reducer์ ์์๋ณด๋ฉฐ, TCA์์์ ๋ฐ์ดํฐํ๋ฆ์ ๋ํด์ ์ดํด๋ณด์์ต๋ axiomatic-fuschia-666.notion.site What is Store ๋ฐ ํ์๋์ Reducer์ ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ๋ ์ฐธ์กฐ ํ์
๊ฐ์ฒด ์ฑ์ State, Action์ ๊ด๋ฆฌ State์ ๋ณํ ๊ฐ์ง ์ก์
์ฒ๋ฆฌ let store: Store public ty..