SwiftUI: CoreData와 CloudKit을 이용해 iCloud로 기기간 데이터 동기화 기초

소개 iCloudKit의 CloudKit을 이용해 CoreData에 저장된 데이터를 동기화하는 방법입니다. 별도의 인증 절차 없이 같은 iCloud계정을 가진 기기는 자동으로 연동이 됩니다. 동기화하려는 기기는 같은 애플 iCloud 아이디로 로그인되있어야 합니다. 개발자가 CloutKit을 도입하려면 유료 개발자 계정이 필요합니다.   방법 Step 1: 프로젝트 생성 (1) Xcode에서 File -> New -> Project… 메뉴 선택 더보기…

SwiftUI: 스크롤을 하면 하단 바 일부가 애니메이션으로 사라지거나 나타나기 (사파리처럼) 下

이전 글 SwiftUI: 스크롤을 하면 하단 바 일부가 애니메이션으로 사라지거나 나타나기 (사파리처럼) 上   소개 UIViewReprestable로 감싼 웹뷰(WKWebView)의 스크롤 상태에 따라 하단 툴바 및 주소창 모양이 변하도록 하는 예제입니다. 이전 예제에서 해당 동작을 @State로 구현하는 방법을 설명하였습니다. 이번 포스트는 실제로 웹뷰의 스크롤 상태에 따라 하단 툴바가 확장/축소되기 위한 과정을 진행합니다. 더보기…

SwiftUI: 스크롤을 하면 하단 바 일부가 애니메이션으로 사라지거나 나타나기 (사파리처럼) 上

소개 iOS 기본 앱인 Safari 브라우저(아이폰)을 보면 밑에 있는 URL 도구창 + 툴바가 스크롤 상태에 따라 변하는 모습을 볼 수 있습니다. 애니메이션 및 어떻게 돌아가는지 분석해보려고 합니다. 이번 포스트는 URL 도구창 + 툴바가 확대/축소하는 과정만 알아보겠습니다.   동작 분석 하단의 상태는 크게 둘로 나뉩니다. 상태 1: URL 도구창이 확대되었고 툴바가 더보기…

Swift: 약수(divisor) 구하기

약수 약수는 어떤 정수를 다른 정수로 나누어 떨어지게 하는 정수를 말합니다. 즉, 어떤 수를 다른 수로 나눌 때 나머지가 0이 되는 수들이 해당 수의 약수입니다. 예를 들어, 6의 약수는 1, 2, 3, 6이고, 12의 약수는 1, 2, 3, 4, 6, 12입니다. 약수는 양수일 필요는 없으며, 음수나 0도 가능합니다. 또한, 1과 더보기…

SwiftUI: Combine을 이용해 Debounce, Throttle 구현하기

소개 Debounce, Throttle 기능이 필요할 때 Combine을 이용해서 구현할 수 있습니다. Swift(스위프트): Debounce, Throttle 로 함수 실행 횟수 제한 (DispatchWorkItem 이용, 외부 라이브러리 없이) debounce, throttle를 간단히 요약하면 이벤트의 반복 실행시 콜백 함수의 불필요한 실행을 줄이는 역할을 합니다. 이로 인해 클라이언트가 혜택을 볼 수도 있거나 혹은 서버 측에 불필요한 리퀘스트를 더보기…

SwiftUI: 화살표 모양 그리기 (Shape, Path 사용)

SwiftUI에서 화살표 모양을 그리는 방법 원문: How to Create Arrow Shape in SwiftUI   소개 앱을 개발할 때, 사용자에게 알려줄 여러 기호가 필요하다는 것을 깨닫게 됩니다. 화살표는 움직임이나 방향을 나타내는 널리 알려진 기호입니다. SwiftUI의 유연성(flexibility)은 화살표의 생성과 방향 지정을 쉽게 할 수 있게 합니다. 🤔 SwiftUI에서 화살표를 추가하고 회전하는 방법을 더보기…

Swift UIKit: PDFKit에서 PDF 파일의 Annotation 지우개 구현

소개 인터넷에서 PDFKit과 Annotation을 다루는 예제를 찾았는데 이 저장소가 지우개 기능이 제대로 구현이 안되어 있기 때문에 참고용으로 포스트를 작성합니다. https://github.com/poluektov/pdfkit-ink-annotations   Step 1: 메인 화면에 지우개 버튼 추가 Main.storyboard 파일을 연 뒤 Bar Button Item과 Flexible Space를 추가한 뒤 화면 하단의 툴바에 삽입합니다. Bar Button Item의 텍스트를 Eraser로 변경하고 Assistant 더보기…

SwiftUI: SwiftUI의 View에서 UIRepresentableView(ViewController)에 접근하여 명령을 실행하는 방법

개요: SwiftUI와 UIKit을 연결하고 컨트롤하기 이미 이 주제와 관련하여 포스트를 작성한 적이 있습니다. SwiftUI: 웹 뷰(WKWebView) 추가하기 및 자바스크립트 실행 (Representable 사용) 그런데 위의 방법은 Combine의 PassthroughSubject를 이용하기 때문에 너무 비직관적이고 이해하기 어려워서 뷰모델만 사용한 그나마 약간 간략화된 방법을 소개하려고 합니다. (이 방법도 딱히 쉬운건 아닙니다.)   배경 SwiftUI에서 WebKitView를 더보기…

Swift: 우선 순위 큐 Priority Queue (설명 + 구현)

이전 글 Swift: 큐(queue) 구현하기   우선순위 큐 (Priority Queue) 힙 (Heap) 우선순위 큐 구현에서 가장 많이 사용하는 자료구조가 힙(Heap) 구조이므로 먼저 힙에 대해 아는 것이 좋습니다. 힙은 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전이진트리(complete binary tree)를 기본으로 한 자료구조(tree-based structure)입니다. 힙의 속성으로는 A가 B의 부모노드(parent node) 더보기…

Swift: 큐(queue) 구현하기

큐(Queue) 큐(queue)는 기본적인 자료 구조의 한가지로, 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조로 저장하는 형식을 말합니다. 나중에 집어 넣은 데이터가 먼저 나오는 스택과는 반대되는 개념입니다. 프린터의 출력 처리나 운영체제의 메시지 처리기, 프로세스 관리 등 데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용됩니다.   기본 배열을 더보기…