전체 글 338

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

상태를 감지하는 방법

적용한 Keyboard show, hide 감지 하는 기능이다. 나중에 상태 감지 후 bool 만 받아서 어떤 내용으로 감지할 때 쓰기 좋을 것 같고처음 보는 코드들이 있어서 정리해본다. import Foundationimport Combineimport UIKitextension Publishers { static var keyboardWillChange: AnyPublisher { let willShow = NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification) .map { _ in true } let willHide = Notification..

iOS/Swift 2025.04.23

Accessing StateObject's object without being installed on a View. This will create a new instance each time

SwiftUI에서 @StateObject를 사용할 때 생길 수 있는 오류이다. @StateObject는 객체가 뷰의 생애주기 동안 한 번만 생성된다는 특징이 있다.뷰가 갱신되거나 재구성될 때 해당 객체가 계속 유지되도록 보장하는 속성 래퍼이다. @StateObject를 뷰 안 에서 직접 사용하지 않고, 다른 곳에서 객체에 접근하려고 할 때 문제가 생긴다. 뷰 외부에서 접근하려고 할 때, SwiftUI는 그 객체가 뷰에 제대로 설치되지 않았다는 메시지를 띄운다.@StateObject가 제대로 선언되지 않거나, 다른 곳에서 @StateObject에 접근하려고 할 때 나는 문제이다. // 잘못된 예시 (뷰 외부에서 @StateObject에 접근)@StateObject var myObject = MyObj..

iOS/ErrorDictionary 2025.04.22

SwiftData 모델에 있는 데이터가 빈 값일 수도 있고 아닐 수도 있을 때, 어떻게 처리해야하지?

Big Idea (큰 주제): 옵셔널 Essential Question (핵심 질문): 가지고 있는 데이터 따라 옵션적으로 값을 보여주거나, 보여주지 않거나 하려면 어떻게 해야할까? Challenge (도전 과제): 알아보고, 직접 구현 해보고, 정리해보자 Activities (학습 활동): 현재 하고 있는 챌린지에서 이렇게 데이터를 표현해야한다.1. 값이 무조건 있어야한다. (이게 기본, Non-Optional 타입)2. 값이 있을 수도, 없을 수도 있다.3. 값이 없으면 보여주지 않아야한다.4. 값이 어떤가에 따라 다르게 처리해야한다. 이러한 조건에서 어떻게 앱을 구현해야할지 찾아봐야겠다. 일단 데이터에 값이 있을 수도 있고, 없을 수도 있음을 표현하는 방법은 여러가지가 있다. 프로그래밍 적으로..

iOS/Swift 2025.04.19
728x90