iOS/Swift 21

[HealthKit] HKObserverQueryCompletionHandler

https://delightpip.tistory.com/390 [HealthKit] enableBackgroundDeliveryHealthKit Capabilities Entitlementcom.apple.developer.healthkit.access 앱이 포그라운드/백그라운드 상태로 실행되면, HealthKit은 해당하는 HKObserverQuery의 핸들러를 즉시 실행시킨다. 백그라운드에서도 작동하려면delightpip.tistory.com 백그라운드 전달에 사용되는 completion handle typealias HKObserverQueryCompletionHandler = () -> Void 이 completion handler는 백그라운드 전달에 응답할 때 호출해야 하는 클로저를 정..

iOS/Swift 2025.07.11

[HealthKit] enableBackgroundDelivery

HealthKit Capabilities Entitlementcom.apple.developer.healthkit.access 앱이 포그라운드/백그라운드 상태로 실행되면, HealthKit은 해당하는 HKObserverQuery의 핸들러를 즉시 실행시킨다. 백그라운드에서도 작동하려면, 앱 실행 시점에 observer query를 등록해야 한다.보통 AppDelegate나 SceneDelegate의 앱 초기화 지점에서 설정해야 백그라운드 전달이 제대로 작동한다AppDelegate의 application(_:didFinishLaunchingWithOptions:)에서 설정쿼리가 등록되어 있지 않으면, HealthKit이 데이터를 보내도 앱이 무시하니까 주의HKObserverQuery 안에서 제공되는 com..

iOS/Swift 2025.07.09

[Foundation/Class] NotificationCenter

NotificationCenter 란?객체 간 느슨한 통신(loose coupling)을 가능하게 하는 event broadcast system다수의 객체에 이벤트 상태변화를 알리는 방송이라고 생각하면 됨단일 프로그램 내에서만 동작 (프로세스 간 통신은 DistributedNotificationCenter 사용)Notification 이란?NotificationCenter가 전달하는 단일 이벤트의 데이터 단위앱 내부의 객체 간 메시지를 전달하는 역할로, 옵저버 패턴의 일부이다.[!NOTE] Notification과 User Notification(UNNotification)은 다른 개념임.NotificationCenter의 내부구조 swiftclass NotificationCenter { priva..

iOS/Swift 2025.07.02

[문법/키워드] Computed Property / Extension

1. Computed Property (계산 속성)속성처럼 보이지만, 내부적으로 계산해서 값을 반환함.보통 다른 속성을 기반으로 동작get, set 블럭 사용 가능.저장공간을 갖지 않음 (값을 "가지고 있는" 게 아니라 "계산"함)읽기 전용도 가능, 읽기/쓰기 모두 가능. struct 안에 있는 값을 활용하여 어떤 계산식을 통해 값을 리턴시켜줌. struct Circle { var radius: Double // 계산 속성 (읽기 전용) var area: Double { return .pi * radius * radius } // 계산 속성 (읽기 & 쓰기) var diameter: Double { get { re..

iOS/Swift 2025.05.21

[문법/키워드] mutating, Associated Value (연관 값)

1. mutatingmutating 키워드는 구조체(struct)나 열거형(enum)에서 인스턴스 자신의 속성을 변경하고자 할 때 사용한다.클래스(class)는 참조 타입이라서 메서드 내에서 속성 수정이 자유롭지만,구조체/열거형은 값 타입이라 기본적으로 메서드 내에서 속성 변경이 금지됩니다.이를 허용하기 위해 mutating 키워드를 사용합니다. struct Counter { var count = 0 mutating func increment() { count += 1 }}var c = Counter()c.increment()print(c.count) // 1 2. Associated Value (연관값) 열거형(enum) 에서 각 case에 값을 함께 저장하고 싶을 때 ..

iOS/Swift 2025.05.20

Swift에서 closure 함수 쓸 때 사용되는 @escaping 은 뭘까?

@escaping 키워드는 Swift에서 클로저가 함수의 생명 주기 밖에서도 사용될 수 있을 때 사용한다.클로저가 함수가 반환된 후에도 실행될 수 있다면, 해당 클로저 파라미터에 @escaping을 붙여야 한다.보통 비동기 작업에서 자주 사용된다. 예를 들어, 네트워크 요청이 끝난 뒤 결과를 처리하는 클로저가 이에 해당한다. 언제 @escaping을 사용해야 하는가?클로저가 다음 중 하나라도 해당되면 @escaping을 붙여야 한다.함수가 종료된 이후에 클로저가 실행된다.클로저가 저장 프로퍼티로 저장된다.클로저가 DispatchQueue, OperationQueue 등에 의해 나중에 호출된다. func fetchData(completion: @escaping (String) -> Void) { ..

iOS/Swift 2025.05.14

Swift Closure

Closure 명명된 함수 생성없이 실행되는 코드의 그룹을 말한다 이 클로저는 정의된 context 에서 상수, 변수에 대한 참조를 캡처하고 저장할 수 있다.이러한 상수와 변수를 closing over 라고 한다.Swift 는 캡처의 모든 메모리 관리를 처리한다. 클로저는 세가지의 형태 중 하나의 모습을 한다 전역 함수 : 이름을 가지고 어떠한 값도 캡처하지 않음중첩 함수 : 둘러싼 함수로 부터 값을 캡처주변 context 의 값을 캡처할 수 있는 경량 구문으로 작성되는 이름 없는 클로저 Function 과 Closure import SwiftUIstruct ClosureFunctionDemoView: View { // MARK: - 1. Function (이름 있는 함수) fun..

iOS/Swift 2025.05.03

Swift 접근 제어 요약

1. 접근 제어란?다른 소스 파일이나 모듈에서 코드에 접근할 수 있는지 여부를 제한.구현 세부사항 은닉 및 공용 인터페이스 정의 목적.클래스, 구조체, 열거형, 프로퍼티, 메서드, 초기화, 서브스크립트, 프로토콜, 전역 함수 등에 적용 가능.2. 핵심 개념개념설명모듈독립적인 빌드/배포 단위 (예: 앱, 프레임워크)소스 파일모듈 내의 개별 .swift 파일패키지여러 모듈을 묶은 집합 (SwiftPM 기준)3. 접근 수준 5단계수준설명open가장 개방적. 다른 모듈에서도 상속, 재정의 가능 (클래스/멤버만 사용 가능)public다른 모듈에서 접근은 가능, 상속/재정의는 불가internal기본값. 같은 모듈 내에서만 사용 가능fileprivate같은 소스 파일 내에서만 접근 가능private같은 선언 블록 및..

iOS/Swift 2025.05.02

내가 더 이상 헷갈리기 싫어서 적는 Swift의 핵심 구성 요소

내가 맨날 파라미터, 메소드, 함수 등을 제대로 딱 인지 못하고 부르는 것 같아서(걍 막 냅다 함수라고 쓰거나, 걍 넘긴다 받는다 이런식으로 쓰는게 많아서)각자의 애들에게 정확한 이름을 확인하기로 했다. 1. Property 프로퍼티클래스, 구조체, 열거형에 속한 값저장 프로퍼티(Stored Properties) : 값을 저장하는 변수나 상수계산 프로퍼티(Computed Properties) : 값을 계산하여 반환타입 프로퍼티(Type Properties) : 인스턴스가 아닌 타입 자체에 속한 프로퍼티프로퍼티 옵저버(Property Observers) : 프로퍼티 값 변경을 관찰 후 반응 struct Person { var name: String // 변수 저장 프로퍼티 let bi..

iOS/Swift 2025.05.01

Managing your app’s life cycle

Foreground 에 있는 앱은 CPU를 포함한 시스템 리소스에서 우선권을 가진다.Background 에 있을 경우 가능한 작업을 적게 해야하고, 이상적으로는 아무것도 안하는게 좋다. 앱의 상태가 바뀔 때마다 적절한 delegate 를 가져와야하는데iOS13 이후로는 UISceneDelegate 객체를 이용한다 UIScene 단위에 대해서 알아보도록 해야겠다. 앱의 하나의 Scene = 하나의 UI인스턴스에 대한 라이프사이클과 상태 변화를 관리한다. // SceneDelegate.swiftclass SceneDelegate: UIResponder, UISceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, ..

iOS/Swift 2025.04.30
728x90