본문 바로가기

Programming/Swift

(17)
MVVM+Router https://github.com/alinradut/MVVMR GitHub - alinradut/MVVMR: MVVM + Router implementation for Swift. MVVM + Router implementation for Swift. Contribute to alinradut/MVVMR development by creating an account on GitHub. github.com
[SwiftUI] 애플에서 제공하는 LazyVGrid 구현 예제 SwiftUI는 애플에서 샘플까지 제공해주고 있어서, 구현하는데 많은 도움이 되곤 합니다. 최근에 GridView를 통한 UI 구현할일이 있어 가이드 문서 살펴보니, 역시나 애플에서 친절하게 방법을 제공해 주고 있었습니다. 예제에서 소개한 방법은 이모지를 유니코드와 이모지 아이콘을 표시하는 방법을 LazyVGrid를 통해 설명한 문서입니다. https://developer.apple.com/documentation/swiftui/lazyvgrid LazyVGrid | Apple Developer Documentation A container view that arranges its child views in a grid that grows vertically, creating items only as n..
[Swift] 취소 가능한 Task를 설정하는 방법 (feat. AnyCancelTaskBag) Task를 여러개 등록한 Class가 있다고 가정할때, 이들의 작업이 모두 완료 되기 전에 Class를 닫아야할 경우가 생깁니다. 이때 진행중인 작업을 즉시 완료 하고, 메모리에서 해제하고 싶을 때가 있는데요 Combine은 .store를 통해 여러개의 subject를 등록하고 Class해제 시점에 같이 해제 시켜줄 수 있는데요 class AnyClass { private var subject = PassthroughSubject() private var cancellables: [AnyCancellable] = [] init() { subject .sink { [weak self] text in guard let self = self else { return } }.store(in: &self.canc..
[SwiftUI] @StateObject 또는 @ObservedObject 차이점 SwiftUI에서 MVVM형태의 코드를 작성하려고 할때 아래와 같은 방식으로 대부분 사용할텐데요 class TestViewModel: ObservableObject { @Published var name: String? } struct TestView: View { @ObservedObject var viewModel = TestViewModel() var body: some View { Text(viewModel.name) } } ViewModel의 Property Wrapper에는 아래와 같이 @StateObject 또는 @ObservedObject를 지정할 수 있습니다. @StateObject var viewModel = TestViewModel() @ObservedObject var viewMod..
Key path를 활용한 Swift Closure 활용하기 키 경로를 사용하여 코드를 더 읽기 쉽고 효율적으로 만드는 방법을 소개하도록 하겠습니다. 다음과 같이 회사의 이름 및 public 여부 등을 나타내는 Company struct가 있다고 해보겠습니다. struct Company { let name: String let isPublic: Bool let stockPrice: Int } let companies: [Company] = [ Company(name: "Apple", isPublic: true, stockPrice: 140), Company(name: "Facebook", isPublic: true, stockPrice: 12), Company(name: "Google", isPublic: false, stockPrice: 333), Company..
[WWDC2021] Your guide to keyboard layout 애플이 지난 WWDC2021에 이를 개선한 keyboardLayoutGuide를 발표했습니다. 그동안 키보드가 보여질때 나머지 View영역이 가려지는 걸 방지하기 위해 keyboardWillShowNotification등의 observer등을 통해 키보드가 올라올때, 또는 키보드가 내려갈 때 키보드 높이를 계산해 나머지 View Layout을 업데이트 해줘야하는 번거로움이 있었습니다. 이번에 새롭게 등장한게 바로 UIKeyboardLayoutGuide이라는 녀석입니다. 사용방법은 아래와 같습니다. (매우 심플해졌군요...) 키보드 높이에 영향받는 View가 있다면 keyboardLayoutGuide의 topAnchor을 통해 AutoLayout을 지정하면 됩니다. 아래 샘플은 버튼을 KeyboardLay..
withCheckedContinuation memory leak 현상 및 해결방법 Handler를 async/await으로 바꾸려는 경우 핸들러에 withCheckedContinuation를 추가해 아래와 같이 사용하는데요 Class MessageManager { func recentMessages() async -> [String] { return await withCheckedContinuation { continuation in self.requestMessages() { list in continuration.resume(returning: list) } } } } let messages = await recentMessages() 평상시에는 문제가 되지 않으나 만약 Class가 부득이하게 종료해야하는 상황이 오면, 기존에 요청했던 async를 모두 완료 되기 전에는 정상적으로..
[SwiftUI] @Published 사용법 및 @ObservedObject와의 관계 SwiftUI의 View 및 ViewModel 관계에서 주로 쓰는게 @Published와 @ObservedObject인데요 Class FooView { @ObservedObject viewModel = FooViewModel() } Class FooViewModel: ObservableObject { @Publihsed foo: String } 이들 관계 및 사용 관련해서 이해하기 좋은 블로그를 하나 소개하려 합니다. https://pilgwon.github.io/post/published-risks-and-usage-explained [수위프트UI/번역] 코드로 알아보는 @Published의 사용법과 위험성 @Published risks and usage explained with code exampl..

반응형