[SwiftUI] Combine
·
Swift/정리
Combine Framework 시간에 따라 값들을 처리하기 위한 선언적인 Swift API 시간에 따라 변할 수 있는 값으로 노출하기위해 publisher를 선언합니다 publisher로부터 받아오기 위한 subscriber를 선언합니다. publisher는 시간에 따라 일련의 값을 전달할 수 있는 타입을 선언하며, 연산자를 사용하여 상위 발행자로부터 받은 값을 처리하고 다시 발행할 수 있습니다. subscriber는 publisher로부터 이벤트를 얼마나 빨리 받을지 제어 할 수 있습니다. 텍스트 필드의 업데이트와 URL 요청, 응 답 처리 등을 조율할 수 있습니다. 코드를 더 읽기 쉽고 유지 보수하기 쉽게 만들 수 있습니다. 이벤트 처리 코드를 중앙 집중화하여 중첩된 클로저 및 규약 기반 콜백과 같..
[Swift] SwiftLint
·
Swift/정리
SwiftLint가 뭘까? 회사나 팀에서 정한 스타일 규칙을 따르지 않는 코드를 확인하고 표시하는 것을 도와줘요. 일관된 코드를 작성하는데 도움을 주는 역할을 해요. 공식 Swift 언어 문서와는 직접적인 관련이 없어요! SwiftLint를 사용하는 이유는?? 1. 신경이 분산되지 않고 중요한 것에 집중 모든 Swift 코드가 일관성을 유지하도록 하기 위해서! 새로운 개발자가 합류하거나 예전 코드를 읽을 때 읽기 쉽도록 도움을 줍니다. 이렇게 일관적으로 코드를 작성하면 어떤 코드가 파일의 다른 부분과 비교해서 문법이 이상한 부분을 찾는 역할을 한다고 해요 2. 프로젝트간 일관성 유지 개인 프로젝트, 회사 프로젝트 혹은 전체 Swift 커뮤니티간에도 일관성 유지가 필요해요 한 프로젝트에서 SwiftLint..
[SwiftUI] NavigationStack
·
Swift/정리
기존 네비게이션 NavigationLink("Details", isActive: $item.showDetail) { DetailView() } 새로운 네비게이션 API Navigation의 새로운 종류 NavigationStack 새로운 시스템 설정 앱, 애플워치 앱 등 (푸시 팝 인터페이스) NavigationStack(path: $path) { NavigationLink("Details", value: value) } NavigationSplitView Mail 또는 Notes와 같은 다중열 애플리케이션에 적합 iPhone, iPad의 SlideOver, AppleWatch와 Apple TV의 단일 열 스택에 자동으로 적응 NavigationSplitView { RecipeCategories() } ..
[SwiftUI] 애플스토어 앱 클론코딩(스크롤)
·
Swift/개발
애플스토어 스크롤 피그마로 받은 UI 디자인 개발 부분 Scroll 길이 계산 (애플스토어 앱 참고) UIScreen.main.bounds.height 사용 (GeometryReader도 가능) PreferenceKey 프로토콜 사용 기능 : SwiftUI의 레이아웃 시스템에서 뷰의 크기, 위치 또는 다른 사용자 정의 정보와 같은 데이터를 수집하고 공유하기 위해 사용 디바이스의 높이를 측정 enum, switch 사용하여 색상마다 View를 다르게 그려줌 Scroll Animation .onPreferenceChange(OffsetPreferenceKey.self) { value in currentHeight = value print("currentHeight: \\(value)") // 현재 디바이스 ..
[SwiftUI] 알람 앱 클론코딩
·
Swift/개발
아이폰 기본 알람 앱 피그마로 받은 UI 디자인 개발 부분 ObservableObject, @StateObject, @ObservedObject 사용하여 데이터 전달 MainView는 List를 사용하여 Scroll했을때 navigationTitle이 Header 가운데에 올라감 알람을 List에 append하는 방식 알람 모델 클래스 class AlarmModel: Identifiable,ObservableObject { let id : UUID = UUID() var time: String var amPm: String var date: Date @Published var alarmActive: Bool // MARK: CREATE ALARM LIST init(date: Date) { self.dat..
[SwiftUI] 애플스토어 앱 클론코딩
·
Swift/개발
애플스토어 앱 소개(애플 상품 소개및 구매 어플) 피그마로 받은 UI 디자인 개발 부분 Swipe Promotion Interaction 구현 (애플스토어 앱 참고) TapView중 page style를 사용하여 구현 Indiactor 구현 Swipe Product Interaction 구현 (애플스토어 앱 참고) Geometry Reader와 offset을 이용하여 구현 Model을 만들어서 컴포넌트화 Swipe Animation GeometryReader { geo in // 전체넓이에서 공백 넓이만 뺀 값 let width = geo.size.width - (trailingSpace - spacing) // 두번째 카드 일 때 양 옆 카드의 끝을 똑같이 보여주는 넓이 값 let adjustMentW..
[SwiftUI] 출쓱 앱 클론코딩
·
Swift/개발
출쓱 앱 소개(애플 디벨로퍼 아카데미에 출석 관리 어플) 피그마로 받은 UI 디자인 잘 몰랐던 문법 () -> Front**는 클로저 타입을 나타냄 제네릭 func count(numbers: [Number]) { } 매개 변수화된 타입(Parameterized Type)을 만들기 위해 사용되는 기능 함수나 클래스에서 사용할 데이터 타입을 미리 지정하지 않고, 함수 또는 클래스를 호출할 때 전달되는 인자에 따라 동적으로 타입을 결정 코드의 재사용성과 유연성,타입의 안정성 보장 Flashcard(front: {CardFrontView()}, back: {CardBackView()}) Flashcard 구조체를 생성하는 방법 중 하나 front와 back 프로퍼티에 앞면(CardFrontView)과 뒷..
[TIL] Swift 문법 옵셔널 체이닝(Optional Chaining)
·
Swift/문법
옵셔널 체이닝(Optional Chaining) 언래핑 없이 옵셔널 값의 멤버에 접근 현재 Nil일 수 있는 옵셔널인 프로퍼티, 메서드, 서브스크립트를 조회하고 호출하기 위한 프로세스 옵셔널에 값이 포함되어 있으며 프로퍼티,메서드,서브스크립트는 호출에 성공 옵셔널이 nil 이면 프로퍼티,메서드,서브스크립트 호출은 nil을 반환 여러 조회는 함꼐 연결될 수 있고 체인에 어느 부분이라도 nil이면 전체 체인은 실패 강제 언래핑 대안으로 옵셔널 체이닝(Optional Chaining as an Alternative to Forced Unwrapping) 프로퍼티,메서드,서브스크립트를 호출하려는 옵셔널 값 뒤에 물음표(?)를 배치하여 옵셔널 체이닝을 지정,값에 강제 언래핑을 하기 위해 옵셔널 값 뒤에 느낌표(!..
[TIL] Swift 문법 초기화(Initializer) - 2
·
Swift/문법
클래스 타입에 대한 초기화 구문위임(Initializer Delegation for Class Types) 지정된 초기화 구문과 편의 초기화 구문 사이의 관계를 단순화 하기위해 Swift는 초기화 사이의 위임 호출에 대한 3가지 규칙 적용 지정된 초기화 구문은 상위 클래스로부터 지정된 초기화 구문을 호출 편의 초기화 구문은 같은 클래스로부터 다른 초기화 구문을 호출 편의 초기화 구문은 궁극적으로 지정된 초기화 구문을 호출 지정 초기화 구문은 항상 위로 위임 편의 초기화 구문은 항상 옆으로 위임 2단계 초기화(Two-Phase Initialization) Swift에서 클래스 초기화는 2단계 프로세스, 첫번째 단계에서 각 저장된 프로퍼티가 해당 프로퍼티를 도입한 클래스에 의해 초기값이 할당 저장된 프로퍼티..
[TIL] Swift 문법 초기화(Initialization) - 1
·
Swift/문법
초기화 클래스, 구조체, 열거형 인스턴스를 사용하기 위해 준비 작업을 하는 단계 각 저장 프로퍼티의 초기 값을 설정 초기화 과정은 initializer를 정의 하는 것으로 구현 Swift initializer는 값을 반환 ❌ 초기화와 반대로 여러 값과 자원의 해지를 위해 deinitializer도 사용 저장 프로퍼티를 위한 초기값 설정(Setting initial Values for Stored Properties) 인스턴스의 저장 프로퍼티는 사용하기 전에 반드시 특정 값으로 초기화 기본값으로 설정할 수 있고, 특정 값을 설정할 수도 있음 initializer에서 저장 프로퍼티에 값을 직접 설정하면 프로퍼티 옵저버가 호출되지 않고 값 할당이 수행 이니셜라이저 (Initializers) 이니셜라이저는 특정..
[TIL] Swift 문법 상속(Inheritance)
·
Swift/문법
상속(Inheritance) class는 메소드, 프로퍼티와 다른 특징을 다른 클래스로 부터 상속할 수 있음 Swift에서 클래스가 다른 타입과 구분되는 근본적인 요소 저장된 프로퍼티, 계산된 프로퍼티 상관없이 상속받은 프로퍼티에 프로퍼티 옵저버를 설정하여 값 설정에 반응 기반 클래스 정의 (Defining a Base Class) 다른 어떤 클래스로부터 상속받지 않은 클래스를 기반 클래스라고 함 class Bulmang { var age = 25 var description: String { return "bulmang's age is \\(age)" } func developApp() { } } print("Bulmang: \\(Bulmang.age)") // Bulmang: bulmang's age..
[TIL] Swift 문법(Subscripts)
·
Swift/문법
서브스크립트(Subscripts) Class,Struct,enum 스크립트를 정의해 사용, 콜렉션,리스트, 시퀀스등(서브스크립트) 집합의 특정 멤버 엘리먼트에 간단하게 접근할 수 있음 서브 스크립트를 이용한다면 추가적인 메소드 없이 특정 값을 할당할거나 가져올 수 있음 예시 배열 인스터스의 특정 엘리먼트는 someArray[index]문법 Dictionary instance의 특정 엘리먼트는 someDictionary[key]로 접근할 수 있음 하나의 타입에 여러 서브스크립트로 정의 할 수 있고 Overload도 가능 var myArray = [1, 2, 3, 4, 5] // 서브스크립트를 사용하여 인덱스 0의 값을 가져옴 let firstElement = myArray[0] // 1 // 서브스크립트를..
[TIL] Swift 문법 메소드(Methods)
·
Swift/문법
메소드(Methods) 특정 타입의 Class, Struct, enum과 관련된 함수 특저 타입의 인스턴스에서 실행할 수 있는 메소드를 인스턴스 메소드, 특정 형과 관련된 메소드를 타입 메소드 인스턴스 메소드(Instance Methods) 특정 Class,Struct,enum (OOP)의 인스턴스에 속한 메소드 인스턴스 내의 값을 제어하거나 변경할 수 있음 // Counter클래스를 선언하고 인스턴스 메소드로 각각 increment(), increment(by amount: Int),reset()를 //정의해 인스턴스 내의 countproperty를 변경하는 기능을 수행 class Counter { var count = 0 func increment() { count += 1 } func increme..
[TIL] Swift 문법 클래스와 구조체
·
Swift/문법
클래스와 구조체(Classes and Structures) 클래스와 구조체는 프로그램의 코드를 조직화 하기 위해 일반적으로 사용 OOP를 위한 필요 요소 클래스와 구조체의 비교 (Comparing Classes and Structures) Swift에서 클래스와 구조체는 많은 공통점이 있움. 클래스와 구조체 둘다 다음과 같은 기능이 가능. 공통점 값을 저장하기 위한 프로퍼티 정의 기능을 제공하기 위한 메소드 정의 subscript 문법을 이용해 특정 값을 접근할 수 있는 subscript정의 초기 상태를 설정할 수 있는 initializer 정의 기본 구현에서 기능 확장 특정한 종류의 표준 기능을 제공하기위 한 프로토콜 순응 프로퍼티, 메소드, 서브스크립트, 초기화, 확장 그리고 프로토콜을 참조 구조체로..
[TIL] Swift 문법 열거형(Enum)
·
Swift/문법
열거형 열거형은 관련된 값으로 이루어진 그릅을 공통의 형으로 선언해 형 안전성(type-safety)을 보장하는 방법으로 코드를 다룰 수 있게 해줌. case값이 string,character,integer,floating 값들을 사용 가능 열거형 1급 클래스 형이어서 계산된 프로퍼티를 제공하거나 초기화를 지정하거나,초기 선언을 확장해 사용 enum키워드를 사용해 열거형을 정의 enum CompassPoint { case north case south case east case west } // 콤마로 구분 가능 enum Planet { case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune } Swift에서 열거형은 생성될 때 각 case..