iOS/SwiftUI (8) 썸네일형 리스트형 SwiftUI의 @StateObject vs @ObservedObject: 정확한 사용법과 차이점 정리 SwiftUI에서 @StateObject와 @ObservedObject는 상태를 관리하고 뷰를 다시 렌더링하기 위해 사용됩니다. 둘은 비슷한 기능을 제공하지만, 용도와 동작 방식에 중요한 차이가 있습니다. 이 차이점을 이해하면 효율적인 상태 관리와 뷰 재렌더링 문제 해결에 큰 도움이 됩니다. @StateObject와 @ObservedObject의 기본 개념 1. @StateObject: 내부에서 직접 관리하는 객체 @StateObject는 뷰 내부에서 직접 생성하고 관리하는 객체에 사용됩니다. 이 객체는 뷰가 처음 생성될 때 한 번만 초기화되며, 이후 뷰가 다시 렌더링되더라도 동일한 인스턴스가 유지됩니다. @StateObject 사용 예시import SwiftUIclass MyViewModel: Obse.. SwiftUI에서의 제스처 우선순위 이해하기: highPriorityGesture와 simultaneousGesture SwiftUI는 사용자 인터페이스를 구축하기 위한 강력한 프레임워크로, 제스처 처리에 있어 유연성과 간결함을 제공합니다. 그러나 여러 제스처를 다룰 때 제스처 간의 우선순위와 상호 작용을 이해하는 것은 필수적입니다. 이번 블로그에서는 highPriorityGesture와 simultaneousGesture를 중심으로 SwiftUI에서의 제스처 우선순위를 자세히 알아보겠습니다. 목차 1. SwiftUI의 기본 제스처 처리 2. gesture(_:)의 이해 3. highPriorityGesture(_:)의 동작 방식 4. simultaneousGesture(_:)의 동작 방식 5. 제스처 우선순위의 실제 사례 6. 제스처 충돌 해결 방법 7. 결론 1. SwiftUI의 기본 제스처 처리 SwiftUI에서 제.. SwiftUI에서 @Environment(.scenePhase) 이해하기 SwiftUI에서는 앱의 다양한 상태를 관리하기 위해 Environment 값을 많이 사용합니다. 그 중에서도 중요한 값 중 하나가 바로 scenePhase입니다. 이번 글에서는 @Environment(\.scenePhase)가 무엇인지, 어떻게 작동하는지, 그리고 앱이 포그라운드에 있거나 백그라운드로 들어가는 등의 상태 변화를 모니터링하는 데 어떻게 활용할 수 있는지 알아보겠습니다. @Environment(.scenePhase)란? scenePhase는 앱의 현재 상태에 대한 정보를 제공하는 Environment 값입니다. SwiftUI에서 앱은 사용자와의 상호작용에 따라 여러 가지 단계(Phase)를 거치게 됩니다. 이 단계들은 주로 아래와 같습니다: • Active (활성화): 앱이 포그라운드에 .. Cancellables in Combine Combine에서 "cancellable"은 퍼블리셔에 대한 구독을 관리 및 종료하여 메모리 누수를 방지하고 데이터 흐름을 제어할 수 있는 개체입니다. 예제: import Combine // 값을 내보내는 간단한 퍼블리셔 생성 let publisher = Just("Hello, Combine!") // 퍼블리셔를 구독하고 취소 가능한 항목을 저장합니다. let cancellable = publisher.sink { value in print(value) } // 나중에 구독이 더 이상 필요하지 않으면 취소. cancellable.cancel() Publisher 생성: 이 예에서는 Just 를 사용하여 publicher라는 Publisher를 생성합니다. 이 Publish는 단일 값(이 경우 "Hello.. API Calls with Combine iOS 앱 개발에서는 API 호출과 같은 비동기 작업을 처리하는 것이 일반적인 요구 사항입니다.지금까지 개발자는 콜백이나 완료 핸들러를 사용하여 이러한 작업을 관리했습니다. 그러나 iOS 13에 Combine이 도입되면서 비동기 작업을 처리하기 좋은 방법이 생겼습니다. Combine 프레임워크는 시간이 지남에 따라 값을 처리하기 위한 선언적 Swift API를 제공합니다. 그리고 Combine 프레임워크는 비동기 데이터 스트림으로 작업할 수 있으므로 API 호출 처리에 적합합니다. 이번글에서는 iOS에서 Combine을 사용하여 API 호출하는 방법을 살펴보겠습니다. Combine 사용 방법 Combine은 iOS에 내장된 프레임워크이므로 외부 종속성을 추가할 필요가 없습니다. 기본적으로 Combine.. TabView and NavigationLink SwiftUI는 iOS, macOS, watchOS 및 tvOS용 사용자 인터페이스를 구축하기 위한 선언적 프레임워크입니다. SwiftUI는 앱에서 복잡한 탐색 패턴을 쉽게 생성할 수 있는 여러 가지 보기와 수정자를 제공합니다. 오늘은 TabView와 NavigationLink라는 두 가지를 살펴보겠습니다. TabView TabView는 화면 하단에 탭 막대를 표시되며, 사용자가 탭바의 아이텝을 탭하여 다른 보기 간에 전환할 수 있도록 합니다. TabView는 홈, 설정, 즐겨찾기 등과 같은 다양한 섹션이나 카테고리로 앱을 구성하는 데 유용합니다. TabView를 생성하는 예제: struct ContentView: View { @State private var selection: Int = 0 var .. 멀티스레딩(MultiThreading) 멀티스레딩 멀티스레딩은 앱의 성능을 향샹기키고 사용자 경험을 향상기키는 중요한 측면입니다. 멀티스레딩은 앱이 동시에 여러 작업을 수행할 수 있도록 하며, 주로 비동기적으로 실행되는 코드를 관리 하고 데이터를 병렬로 처리하는데 사용합니다. 멀티스레딩 이점 성능 향상 : 멀티스레딩을 사용하면 앱이 여러 작업을 동시에 수행할 수 있어, 실행 속도가 향상됩니다. 응답성 향상 : 비동기 프로그래밍을 통해 UI를 차당하지 않고 긴 작업을 수행할 수 있으므로, 사용자가 앱을 더 자주 사용할 수 있게 됩니다. 자원 효율 : 멀티스레딩은 CPU 자원을 최대한 활용하여 더 많은 작업을 빠르게 처리할 수 있게 합니다. 멀티스레딩 단점 동기화 문제 : 여러 스레드가 동시에 데이터에 접근할 때, 적절한 동기화 없이는 경쟁 조건.. .simultaneousGesture() to handle multiple gestures on a single view (한 뷰에서 멀티 제스쳐 하기!!!) 안녕하세요~ 오늘은 간단하게 한 뷰에서 두가지 제스쳐를 받아서 따로 처리하는 방법을 살펴 보려고 합니다. 동일한 뷰에서 두가지 제스쳐를 받기 위해서는 .simultaneousGesture()를 사용하면 간편하게 적용을 하실 수 있습니다. 우선 간단하게 어떤 뷰에서 제스쳐를 받을 때 다음과 같이 사용을 하면됩니다. struct SimpleGestureExample: View { @State private var isDoubleTapped: Bool = false var body: some View { Circle() .fill(isDoubleTapped ? .blue : .red) .frame(width: 200, height: 200) .gesture( TapGesture() .onEnded { isDo.. 이전 1 다음