WidgetKit (5)
WidgetBundle 만들기 WidgetBundle관련 Docs는 여기 간단하게 정리하면 여러개의 위젯을 제공하기 위함이다. 파일을 하나 만들어 주고 @main struct RepoWatcherWidgets: WidgetBundle { var body: some Widget { RepoWatcherWidget() ...
WidgetBundle 만들기 WidgetBundle관련 Docs는 여기 간단하게 정리하면 여러개의 위젯을 제공하기 위함이다. 파일을 하나 만들어 주고 @main struct RepoWatcherWidgets: WidgetBundle { var body: some Widget { RepoWatcherWidget() ...
이제 조금 더 확장을 해보려고한다. RepoMediumView 만들기 또 새로운 파일을 하나 만들어준다. 이때 이전에 언급하지는 않았지만 target을 항상 신경써서 만들자 이전에 NetworkManager의 경우 혹시 원 프로젝트 파일에서도 사용이 될 가능성이 있어서 둘다 체크를 했지만, 지금 View의 경우는 Widget에서만 사용...
UI Design 이부분은 생략 다만 한가지 특이점이라면 HStack { StatLabel(value: 999, systemImageName: "star.fill") StatLabel(value: 99, systemImageName: "tuningfork") StatLabel(value: 999, systemImageName...
Dynamic Month 적용 Config 먼저 파일을 만드는데 일반 Swift File로 만든다. 이때 중요한점 target을 어떤것에 적용할지 반드시 확인하자. struct MonthConfig { let backgroundColor: Color let emojiText: String let weekdayTex...
SwiftUI를 공부하기전 파이널프로젝트를 하고 난뒤, 다른 조들의 프로젝트 결과를 보면서 하나 이건 해보고 싶다고 생각했던것이 바로 Widget 사용이었다. 하지만 전제조건은 SwiftUI를 사용해야한다는 것이었다. 그러다보니 그당시엔 UIKit에만 집중을해서 신경을 쓸수가 없었는데 마침 좋은 강의가 있어 그걸 기반으로 정리를 해보려 한다. ...
마지막 글이되겠다. 5시간 강의였는데 하나하나 정리하면서 넘어가다보니 꽤나 많은 시간이 걸렸다. MainActor MainActor란? MainActor는 UI 업데이트와 관련된 코드를 안전하게 실행하기 위해 사용되는 Swift의 동시성 모델이다. 이를 사용하면 UI 상태 변경이 항상 메인 스레드에서 이루어지도록 보장한다. ...
시나리오: 간단한 숫자 증가 앱 class Counter { var value = 0 func increment() -> Int { value += 1 return value } } struct ContentView: View { var body: some View { ...
Bank Account Playground 만들기 class BankAccount { var balance: Double init(balance: Double) { self.balance = balance } func withdraw(_ amount: Double) { ...
Async Sequence를 지원하는 API URL FileHandle URLSession NotificationCenter 또한 우리가 알고있는 고차함수 map, compactMap, filter, first, prefix, zip 등을 활용할 수 있다. WWDC 1. FileHandle URL은 직전에 했기에 FileH...
AsyncSeqeunce 지진정보를 가지고 해보려한다. 1. without AsyncSequence 우선 여기서 특이점이라면 extension URL { func allLines() async -> Lines { Lines(url: self) } } struct Lines: Sequence { ...