defer
·
Programing Langauge/swift
🎯 목적스코프가 끝날 때 반드시 실행되어야 하는 정리(clean-up) 코드를 안전하게 보장하기 위해 코드와 실행 결과를 보고 한번, 특징을 정리해보자. 🤖 코드func deferShowcase(shouldThrow: Bool) throws -> Int { print("🚀 함수 시작") var x = 10 // (1) 함수 스코프 defer #1 defer { print("🧹 defer A (function scope) - x =", x) } // (2) 함수 스코프 defer #2 (A보다 나중에 선언 → 먼저 실행됨) defer { print("🧹 defer B (function scope)") } // 값 변경 (캡처 타이밍 ..
퀵 헬프 주석
·
Programing Langauge/swift
👋 들어가기 전 option + cmd로 퀵헬프 주석을 작성할 수 있다. 여기서 조금만 더 잘 활용하면 팀원들에게 더 좋은 가독성을 제공할 수 있는데.. /// 두 정수를 더해 결과를 반환한다.////// 간단한 산술 연산을 수행하는 예제 함수이다.////// - Parameters:/// - a: 첫 번째 정수 값/// - b: 두 번째 정수 값////// - Returns:/// 두 정수의 합////// - Throws:////// throw 되는 에러의미 설명////// - Precondition:/// 보장되야하는 조건////// 입력 값은 Int 범위를 벗어나지 않아야 한다.////// - Complexity:/// 시간 / 공간 복잡도////// O(1)/////..
Transferable
·
Programing Langauge/swift
🎥 Transferable ✅ 정의 기존에는 데이터 전달 방식이 제각각, 코드가 복작합고 타입이 안전하지 않음 Drag & Drop → NSItemProviderPhotos → loadTransferableShare → 각자 다른 API 🧩 역할 타입 안전환 데이터 변환여러 전송 메커니즘을 하나의 추상화로 통합이 프로토콜을 채택하는 타입은 어떤 형식(UTType)으로 어떻게 encode /decode 될 수 있는 지 시스템에게 알려주는 역할 🧱 구조public protocol Transferable { /// import / export할 item 정보를 다음 객체 associatedtype Representation : TransferRepresentation /// @resul..
@DynamicProperty
·
Programing Langauge/swift
어디서 봤을까? @State, @Environment, @ObservedObject 같은 property wrapper에서 발견된다. 이들의 공통점은 뭘까?? 🧩 역할An interface for a stored variable that updates an external property of a view. 뷰를 업데이트 하는 외부 저장 변수에 대한 인터페이스조금말이 어렵다. 간단히 얘기하면, 뷰 상태에 영향을 주는 객체는 채택해야한다는 것! SwiftUI가 이 프로퍼티의 변화를 자동으로 추적해야 한다”는 것을 컴파일러와 런타임에게 알려주는 역할DynamicProperty를 채택한 프로퍼티는 SwiftUI의 view 업데이트 사이클과 연동되어 자동으로 갱신 🧱 구조public protocol Dyn..
@resultBuilder
·
Programing Langauge/swift
👋 들어가기 전 오픈소스를 보고 있다가, 신기한 attribute가 있어서 학습해보려고한다. 그 주인공은 바로 @resultBuilder라는 attribute다.🏁 학습할 내용DSL이란@resultBuilder🧩 DSL이란뜬겂없긴한데, 생각보다 요즘 공부하다보면 생각보다 자주 나오는 단어다.DSL은, Domain Specific Language로, 특정한 목적(도메인)에 특화된 언어다. 즉, 일반적인 프로그래밍 언어가 아니라, 특정 문제를 해결하기위한 언어다. 개발자면 사실, 많이 마주쳐봤다. 대표적으로 뭐가 있을까??HTMLSQL무슨 느낌인지 감이온다. HTML -> 웹페이지라는 특정 도메인에 특화된 언어SQL -> 데이터베이스라는 특정 도메인에 특화된 언어, 그렇다면 Swift는 DSL일까??,..
@autoclosure
·
Programing Langauge/swift
🤖 @autoclosure 🏋️ 역할 함수 인자로 전달되는 표현식을 자동으로 클로저로 감싸주는 속성(attribute)지연 평가 (lazy evaluation)를 가능하게 해주는 문법적 편의 장치 🧬 탄생 계기 swift함수는 모든 인자를 미리 평가(eager evaluation) 한다.그래서 다음과 같은 코드를 실행하면, heavyComputation의 결과가 false여도, 이미 실행이됨 func debugLog(_ message: String) { if isDebug { print(message) }}debugLog("결과: \(heavyComputation())") 일시적인 해결방법으로는 아래와 같이 클로저로 감싸야했다.이렇게 되면, 호출하기 전까지는 실행되지 않음fu..