목록전체 글 (26)
iOS 개발 노트
SwiftUI에서 자주 사용되는 프로퍼티 래퍼들:@State@Binding@Published@ObservedObject@StateObject@Environment@EnvironmentObject@StateSwiftUI에서 상태를 처리하기 위해 사용된다. 뷰의 상태를 저장하는 프로퍼티로 상태 관리 주체는 각 해당 선언된 위치에서의 뷰이다.기본적으로 private 선언으로 사용하고, 다른 뷰와 상태를 공유하려면 Binding을 이용함값이 변경될 때마다 뷰 렌더링(UI 업데이트)이 진행됨값에 접근하기 위해서는 변수의 이름을 사용하는데, 변수명에 접근하면 wrappedValue가 반환됨String, Int 등의 간단한 데이터 타입을 저장하기 위해 사용됨count 라는 상태 프로퍼티가 정의되어 있다. Button..
프로퍼티 래퍼 (property wrapper)는 프로퍼티가 저장되는 방법을 관리하는 코드와 프로퍼티를 정의하는 코드 사이에 분리 계층을 추가합니다. 프로퍼티 래퍼는 프로퍼티가 저장되는 방법을 관리하는 코드를 재사용할 수 있게 도와주는 기능이다.@propertyWrapper 프로퍼티 래퍼 내부에는 wrappedValue 라는 연산 프로퍼티가 꼭 선언되어 있어야 하며 struct, enum, class에서 프로퍼티 래퍼를 정의할 수 있다. 프로퍼티 래퍼를 통해 프로퍼티 값 저장 관리 코드를 만들었다면 해당 관리 방법을 적용하고 싶은 프로퍼티에 래퍼를 붙여주는 식으로 사용하면 된다.@propertyWrapperstruct TwelveOrLess { private var number = 0 var ..

https://github.com/ReactorKit/ReactorKitReactorKit이란?ReactorKit은 React 패턴을 기반으로 한 RxSwift 기반의 프레임워크로, 주로 iOS 애플리케이션에서 사용되는 상태 관리 프레임워크이다. ViewModel의 역할을 하는 Reactor와 View 간의 단방향 데이터 흐름을 제공하여 UI와 비즈니스 로직을 분리하고, 애플리케이션의 상태를 관리하는 데 도움을 준다. MVVM과 같은 아키텍처는 규격화된게 없어서 개발자, 회사마다 모두 달라 일관적이지 않은 반면에 ReactorKit은 형식이 갖추어진 형태임. Reactor에 View의 Action을 미리 정의해놓고, 해당 Action을 처리하여 다시 View에 State를 넘기는 단방향 흐름으로 진행된다..
보호되어 있는 글입니다.

SubjectObservable과 Observer의 역할을 모두 할 수 있는 친구이다.즉 Observable로써 이벤트를 방출(emit)할 수도, Observer로써 어떤 이벤트를 구독(Subscribe)하여 무엇인가 처리하는 것도 할 수 있는 것이다. Subject는 4가지 종류로 구분된다.Publish SubjectBehavior SubjectReplay SubjectAsync SubjectPublishSubject값 저장 없음.구독자가 구독을 시작하기 전에 방출된 값은 받을 수 없음. → 저장된 값이 없으니깐!구독자가 구독을 시작하면 그 이후부터 방출된 값을 받을 수 있음.구독자가 이벤트를 수신하기 시작한 이후의 이벤트만 다루고 싶을 때 유용함생성 방법:제네릭을 이용해 방출할 데이터의 타입을 표현해..

자료형(타입)을 나중에 결정하는 것타입(자료형)에 의존하지 않는 범용 코드를 작성할 때 사용하는 것만약 관계의 의미를 이름으로 표현하기 힘들 때는 T, U, V 와 같은 '단일문자(대문자로)' 를 사용하는 것이 일반적이라고 한다.제네릭을 사용하면 실제 호출될 때 타입이 결정되는 재사용이 가능한 범용적인 타입의 함수를 만들 수 있음꺽쇠 안에 제네릭 타입 이름을 명시한다. T는 타입 파라미터라고 부르며 나중에 실제 호출될 때 타입이 결정되는 동작이 된다.func mySwapTwoValues(_ a: inout T, _ b: inout T) { let tempA = a a = b b = tempA}var a = 10var b = 20mySwapTwoValues(&a, &b) //Int 타입으로 결정..

Async/Await에 대해서Async/Await은 비동기 프로그래밍을 위한 새로운 패러다임이다.async 키워드를 사용하여 비동기 함수를 선언하고, await 키워드를 사용하여 해당 함수의 결과가 준비될 때까지 기다리는데, 이 과정에서 현재의 실행 흐름을 차단하지 않고 다른 작업을 계속 진행할 수 있다.async 함수는 비동기적으로 실행되며, 결과를 반환하기 전에 완료될 필요가 있는 다른 비동기 작업을 await할 수 있다.비동기 함수 수행 중 문제가 발생하였을 때 error를 바로 리턴할 수 있도록 해준다 코루틴(Coroutine)Coroutine은 함수가 동작하는 도중 특정 시점에 suspend(일시정지)할 수 있고, resume(다시 재개)할 수 있게 하는 비동기 함수 매커니즘이다.await 키워..

#Preview다음과 같이, #Preview 코드 블록 안에서 뷰컨트롤러의 인스턴스를 생성해주면 된다.#Preview { 뷰컨트롤러 인스턴스} ⌥(option) + ⌘(command) + ⏎(enter) 키 입력으로 프리뷰 화면이 보여지는 Canvas 영역을 표시하거나 숨기거나 할 수 있음!

Assets를 열고 + 버튼을 선택한다. 나타나는 메뉴에서는 Color Set을 선택해 준다. 라이트 모드일 때는 흰색이고, 다크 모드 일 때는 검은색으로 설정할 예정으로,컬러셋의 이름은 WhiteToDark 정도로 설정해 둔다. 우측 인스펙터 영역에서 Appearances를 Any, Light, Dark로 설정해 준다. 라이트 모드일 때와 다크 모드일 때 표현하고 싶은 색상을 지정해 주면 끝! 다음과 같이, UIColor 클래스에서 추가가 잘 되어 있음을 확인해 볼 수 있다. 참고사항Any Appearance라는 게 있는데,이는 다크모드가 등장하기 이전인 iOS 12 이하 버전과의 호환성을 위해 사용되는 것이다. iOS 12 이하 버전에서는 Any로 맞추고, iOS 13 이상 버전 기기에 대..
열거형이란하나의 주제로 연관된 데이터 멤버들로 구성되어 있는 자료형 객체이다.문자열, 정수값 등 입력받아야 할 정보를 입력하는 대신, 선택하는 형식으로 동작됨.열거형에서 데이터들은 열거형 객체를 정의하는 시점에 함께 정의된다. -> 데이터를 함부로 삭제하거나 변경할 수 없으며, 변경하거나 삭제하려면 객체를 정의하는 구문을 직접 수정해야 함열거형 사용 시 좋은 경우원치 않는 값이 잘못 입력되는 것을 막고 싶을 때입력받을 값을 미리 특정할 수 있을 때제한된 값 중에서만 선택할 수 있도록 강제하고 싶을 때열거형으로 정의할 수 있는 데이터 집합의 예:성별: 남, 여, X-gender기기: iPhone, iPad, watch, mac, airPods색상: 빨강, 노랑, 초록국가: 한국, 일본, 중국, 미국, 호주..

Xcode에서 Github 계정 연결을 완료한 상태를 전제 하에 진행해 본다. 먼저 git repository가 없다면 상단 메뉴바에서 [Integrate]-[New Git Repository…] 항목을 선택한다. 프로젝트를 선택하고 Create 버튼을 선택하면 git repository가 생성된다. 이제는 Github에 Remote Repository를 생성해 보자.우클릭 메뉴 중 New “프로젝트명” Remote… 항목을 선택하면 된다. 레포지토리의 이름과 공개/비공개 여부를 선택하고 Create 버튼을 선택하면 된다. Github를 확인해 보면 원격 레포지가 생성되어 있음을 확인해 볼 수 있다. 참고: Github에서 레포지 강제 삭제할 경우 Xcode의 반응원격저장소에 액세스 할 수 없다..

Xcode에서 프로젝트를 생성하고,Target Project의 General 설정을 보면 Supported Destinations 라는 항목이 있다. 여기서 만약에 해당 프로젝트가 iPhone에서 실행되는 앱을 만드는 것이 목적이거나아니면 오직 iPad에서만 실행되는 앱을 만드는 것이 목적이라면!다음과 같이,Destination에는 iPhone만 남겨놓거나 또는 iPad만 남겨놓는 것을 지향해야 한다. 근데 iPhone에서 실행되는 앱을 만드는 것이 목적이지만, 그냥 둘 다 Destination에 추가해놓으면 안되나?그렇게 할 경우,iPhone과 iPad 모두 적합한 레이아웃 형태의 앱을 만들어야 하므로 개발 시 고려 요소가 증가 됨에 주의해야 한다!그리고 갑자기 마음이 바뀌어서 둘 중 하나만 지원하..