매크로(Macros)
·
iOS
잉? 나는 따로 구조체에서 Init을 선언해주지 않았는데 뜨네?이게모지? memberwise initialization이는 컴파일러가 자동으로 init메서드를 생성해주기 때문이다.그렇다면 만약 WhatisMacro에 어떤 프로퍼티도 추가해주고 야 이것도 자동 컴파일러가 하게 해줘!🍎음...비효율적인데? 물론 swift compiler는 오픈소스야 잠만. 우리회의해보자...🧑🏼‍💻어? 그럼 일일이 너네랑 회의해야해? 확장성 딸리네?그래서 나온놈이 매크로다! 🧑🏼‍💻얘가 원하는데로 컴파일러를 수정하지 않고 Swift Package로 배포하는 방법!개발자가 원하는 방식으로 코드를 자동 생성할 수 있도록 돕는다. 매크로란?Swift 매크로는 컴파일러가 소스코드를 자동으로 생성하거나 확장할 수 있도록..
초기화(initialization.. 편의? 지정?)
·
iOS
https://bbiguduk.gitbook.io/swift/language-guide-1/initialization 초기화 (Initialization) | Swift타입의 저장된 프로퍼티에 초기값을 설정하고 초기 설정을 수행합니다. 초기화 (Initialization) 는 인스턴스의 클래스, 구조체, 또는 열거형을 사용하기 위해 준비하는 단계입니다. 이 단계에는 인bbiguduk.gitbook.io여기들어가면 어마어마하ㄷ..분량이... 그만큼 초기화가 swift에서 중요하다.Swift는 모든 저장된 프로퍼티가 초기값을 받을 수 있도록 클래스 타입에 대해 2가지의 초기화 구문을 정의한다. => 바로 지정된 초기화와 편의 초기화라는 친구들이다.지정된 초기화(designated Initializer)해당 ..
Function(1급시민 , inout & 클로저✨)
·
iOS
Swift의 함수는 1급 타입(First Class-type)이다근데 1급타입이 몬데 ? 아래의 3가지를 만족하면된다.아래의 3개가 1급시민의 조건이고 그것을 충족하는 객체가 1급객체이다.변수와 상수에 함수가 저장될수 있다. 아래에서 보면 increment라는 변수에 함수를 할당해주었다. 그러면 저 변수는 함수 그자체그런데 주의 할게 동일한 이름의 함수가 오버로딩 되어있을때는 타입추론이 안되고 타입 명시를 해주어야함.함수가 다른 함수를 값으로 반환할 수 있다.func makeIncrementer() -> ((Int) -> Int) { var answer = 1 func addOne(number: Int) -> Int { return answer + number } return..
Assertions && Preconditions
·
iOS
Swift기본을 다지기 위해 공부하던중 역설과 전제조건....뭐야 왜이렇게 입에 안달라붙고 한국어가 어렵냐..하며 찾아봤다... - Runtime시 발생하는 조건 - 불값이 true면 코드가 진행되고 false면..? 종료시킬수 있음 - 역설은 개발과정에서의 실수를 찾는데 도움을 주고 전제조건은 프로덕션문제 감지하는데 도움을 준다. => 유효하지 않은 조건이 발생하지 않도록 코드를 디자인하기 위해 사용한다. 뭐가다른데? 역설은 오직 디버그 빌드에서만 체크(프로덕션에서는 영향을 안주기에 개발단계에서 많이 해도 상관없다) 전제조건은 디버그와 프로덕션 빌드에서 체크 출시할때 엄청 크리티컬한거 예를들면 어? 이 함수 저번 버전인데 우리 업데이트했는데? 그래서 안바꾸면 API통신 안될텐데.? 프로덕션하고 디버그 ..
go back to basic - @main 플젝만들면 항상생기는 파일 이건 몰까?
·
SWIFT개발일지
어떠한 프로젝트를 만들면 항상 App파일과 ContentView가 만들어진다. 그리고 WindowGroup안에는 ContentView가 들어있다. 이것은 어떻게 작동하는 방식일까? @main은 Type 기반 프로그램 엔트리포인트로 아 너가 앱이 최초 시작점이자 진입점이구나를 알수 있다. 보면 이 구조체는 App프로토콜을 채택하고 있다 이 프로토콜은 시스템이 앱을 실행하기 위해 호출하는 main() 메서드의 기본 구현을 제공합니다. 모든 앱 파일 중 정확히 하나의 진입점을 가질 수 있습니다. 또 다른게 body를 보면 Scene 프로토콜이 있다. 씬은 뷰계층구조의 루트뷰를 포함하고 있고 시스템에 의해 관리되는 라이프사이클을 가지고 잇다. setting과 같은 구체화된 Scene type을 줄 수 도 있다...
LLVM? Swift가 컴파일되는 과정 Swift 기초
·
iOS
Swift를 처음 배울 때 "왜 컴파일 언어지?"라는 의문이 들었어요. 플레이그라운드에서 실시간으로 결과가 나오니까 스크립트 언어 같아 보이거든요 🤔스크립트 언어는 한 줄씩 읽어가며 바로 실행합니다. Python이나 JavaScript처럼요. 번역 속도는 빠르지만 매번 실행할 때마다 한 줄씩 해석해야 해서 실행 속도가 느려요. 그리고 실행해봐야 오류를 발견할 수 있죠.반면 컴파일 언어는 소스코드를 미리 기계어로 번역해둡니다. 컴파일 과정이 필요하지만, 한 번 컴파일하면 빠르게 실행되고 컴파일 타임에 오류를 잡을 수 있어요.Swift가 컴파일 언어인 이유는 성능과 안전성 때문입니다. iOS 앱은 부드러운 60fps를 유지해야 하고, 메모리도 효율적으로 관리해야 하거든요.전통적인 컴파일러의 한계와 현대적 ..
some(Opaque Type)&any Keyword
·
SWIFT개발일지
SwiftUI로 앱을 만들면 제일 먼저 만나는 이 코드, 우리는 과연 정확히 이해하고 사용하고 있을까요?다른 사람은 모르겠지만 저는 일단 NOPE!!Somestruct ContentView: View { var body: some View { Text("Hello World") }}처음에 저는 단순히 "아, some View라고 쓰면 되는구나" 정도로만 생각했었는데요. 그런데 왜 하필 some이라는 키워드를 써야 하는 걸까요? 실제로 이렇게 써보면 어떻게 될까요?struct ContentView: View { var body: Text { Text("Hello World") }}신기하게도 이 코드는 에러 없이 정상 작동합니다! 하지만 body에 Text 외의..
근본으로 돌아가자(4)-@State,@StateObject,@ObservedObject
·
SWIFT개발일지
What is @StateObject???? 우리의 G선생 왈 ObservableObject protocol을 따르는 객체의 생명주기를 관리하는데 쓰이는 프로퍼티 wrapper라고 한다. stateobject를 지정하는 순간 스유(swiftui)가 뷰계층구조가 살아있는동안 유지되도록 보장한다. >> 이것은 다른 화면으로 넘어갔다가 오더라도 객체는 지속된다는 뜻이다 객체를 생성하고 객체 관리, 뷰의 수명동안 새로운 인스턴스를 한번만 찍어냄. 이 찍어내는 타이밍은 뷰에서 생성자 처음 호출할때 그때 한번!!! 그때 stateObject생성자 한번찍힌다고 생각하면 된다. 그러면 어떻게 사용할까요? 1. 이런식으로 클래스 인스턴스 한번 찍어낼때 struct MyView: View { @StateObject pri..
@ViewBuilder & @resultBuilder
·
SWIFT개발일지
@ViewBuilder You typically use ViewBuilder as a parameter attribute for child view-producing closure parameters, allowing those closures to provide multiple child views. For example, the following contextMenu function accepts a closure that produces one or more views via the view builder. func contextMenu( @ViewBuilder menuItems: () -> MenuItems ) -> some View 이를 통해 contextMenu의 클로저를 통해 하나이상의 뷰가..