@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..
rethrows
·
Programing Langauge/swift
🥊 rethrows 🎯 목표아래 상황과 같이, 클로저에서 에러를 던질 때(throw)할 때, 어떻게 던질 수 있을까?enum CustomError: Error { case divideByZero}func divide(number: Int, divisor: Int) throws -> Int { if divisor == .zero { throw CustomError.divideByZero } return number / divisor}func calculate(function: (Int, Int) throws -> Int) { throw function(10, 0) // ⚠️ Thrown expression type 'Int' does not conform ..
@retroactive
·
Programing Langauge/swift
👋 들어가기 전@retroactive란 키워드를 일하다가 마주쳤는데 무슨 역할인지 몰라서, 한번 살펴보자.🏁 학습할 내용retroactive 어원등장 계기역할🔎 @retroactive 📖 어원처음 들어보는 단어인데, 찾아보니 소급적인 뜻이다. 소급적인이라는 한국 단어도, 일상샐황에서 크게 보이지는 않는데, 계약서나 법률에서 찾아볼 수 있다. AI 정리에서 핵심내용은, 새로 시행되는 어떤 규칙이, 과거 어느시점에도 효력을 준다는 의미 🎉 등장 계기swift에서는 타입 정의와 프로토콜 정의가 서로 다른 모듈에 있어도, 제 3자에의해 해당 타입을 특정 프로토콜 준수 가능하도록 확장할 수 있다. 이때, 주의할점은 swift 런타임에서 하나의 타입이 동일한 프로토콜을 서로 다른 모듈에서 확장해서 사용하..
@dynamicMemberLookup
·
Programing Langauge/swift
👋 들어가기 전오랜만에 wow느낌을 받은 attribute를 하나 학습해보려한다. 바로 본론으로 들어가보자.🏁 학습할 내용불편함@dynamicMemberLookup역할원리실습주의할 점💢 나만 불편해?다들 이런 경험이 있을거다. 아래 두 코드를 보면, 둘다 접근하고 싶은데이터가, 어떤 객체안에 private 형태로 존재할 때우리는 울며 겨자먹기로, public으로 풀거나, 별도 함수나 property를 만들어서 해결에 왔다. 그게 직관적이고 좋은 방법인건 사실이다.struct JSON { private var data: [String: Any] = [:]}let json = JSON()// ✅ public으로 바꿔야함print(json.data["name"]) print(json.data["age"..