일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- DP
- swift 점선
- coordinator
- swift 백준
- custom navigation bar
- custombottomsheet
- UIKit
- swift opaque type
- BFS
- traits
- domain data
- swift custom ui
- Tuist
- identifiable
- swift bottomsheet
- SWIFT
- RxSwift
- button configuration
- reactorkit
- task cancellation
- swift concurrency
- scene delegate
- swift navigationcontroller
- task cancel
- swift existential type
- 버튼 피드백
- custom ui
- uikit toast
- swift dashed line
- swift associated type
- Today
- Total
목록TIL (33)
김경록의 앱 개발 여정

일반적인 방식일반적인 방식으로 버튼 정의 시 기본적으로 콘텐츠 사이즈에 한해 터치영역을 제공 let testButton: UIButton = { let button = UIButton(type: .system) button.setTitle("Test", for: .normal) button.backgroundColor = .green return button }() 테스트 예시로 button.BackgroundColor를 변경한 모습별도의 너비를 주지않을 경우 내부 Text나 Image에 따라서 터치 영역을 딱 맞게 자동으로 제공함 Button Configration 사용 시 모습 이미지 + 텍스트를 사용해야할때 button..

이전 작성한 포스팅 공백이 포함된 커스텀 뷰 구현기 를 작성 후 아쉬움이 남아 더 나아 보이는 좋은 방법을 찾았고 이를 기록하고자 합니다.Paragraph Style이란?NSParagraphStyle과 NSMutableParagraphStyle은 iOS에서 텍스트의 문단 스타일을 제어하는 데 사용되는 클래스입니다.이를 통해 텍스트의 줄 간격, 들여쓰기, 정렬, 줄 바꿈 모드 등 다양한 문단 관련 속성을 설정할 수 있습니다.주로 NSAttributedString과 함께 사용되며, 텍스트에 대한 세부적인 스타일링을 가능하게 합니다. 주요 속성들lineSpacing문단 내 줄 간격을 설정합니다.기본값은 0이고, 양수 값으로 설정하면 줄 간 간격이 늘어납니다.paragraphSpacing문단 간 간격을 설정합..

Tuist를 통한 커스텀 폰트 추가 방법Tuist로 폰트를 넣는다면 폰트, 에셋등을 한데 모아 모듈화 하여 사용할 수 있다는 장점이 있다.새로운 모듈 정의tuist 자세한 사용법에 대해선 서술하지 않음project.swift 파일에서 타깃을 추가해 주시면 되는데 이때 resources 폴더를 갖도록 만들어주셔야 합니다.(저와 다르게 따로 모듈화 하지 않고 리소스를 갖고 있는 프로젝트 자체 내에 넣는다면 그렇게 하셔도 됩니다)Tuist edit// Plist에 입력될 폰트이름들 (확장자를 반드시 포함할 것)let fonts = [ "Pretendard-Bold.otf", "Pretendard-ExtraBold.otf", "Pretendard-Medium.otf", ..
개요이번 포스팅에서는 테이블 뷰의 아이템을 선택했을 때, 코디네이터(Coordinator) 패턴을 사용하여 화면을 전환하고, 필요한 데이터를 전달하는 방법을 다룹니다.이 글에서는 ReactorKit, RxSwift, 그리고 Coordinator 패턴을 사용하여 AView에서 BView로 데이터(User)를 전달하는 예시를 설명합니다.각 디자인패턴이나 라이브러리의 상세한 설명은 생략됩니다. 액션 정의하기먼저, A뷰와 B뷰가 있고, A뷰에서 B뷰로 이동한다고 가정합니다. 전달할 데이터는 User 형식으로 정의데이터 모델 정의struct User: Decodable { let name: String? let age: Int?}AView의 Reactor 정의AView의 Reactor는 비동기 처리를 ..

Counter 앱의 Reacotr 분석Reactorfinal class CounterViewReactor: Reactor {CounterView라는 뷰의 Reactor기본적으로 하나의 뷰의 하나의 리액터, 이렇게 함으로 개별 관리가 용이Actionenum Action { case increase case decrease }Action의 경우 사용자의 인터렉션에 기반한 행위를 정의실제 프로젝트에 적용함에 있어서 어느범위까지가 Action인가에 대한 고민이 있었는데,테이블 뷰 셀렉티드, 필요시 스크롤링하는 동작까지도 Action의 범주로 들어가서 정의해주면 된다.해당 예제에선 숫자의 증가와 감소 두개의 액션을 정의했다.State struct State { var value: I..
기본 개념Flux와 Reactive Progamming의 조합Observable 스트림을 통해 사용자의 작업(User Action)과 뷰 상태(View State)가 각 레이어로 전달 됨스트림은 기본적으로 단방향뷰는 Action을 방출(emit)하고 리액터는 States만 방출 할 수 있음디자인 목표테스터블리액터는 뷰와 의존성이 없다뷰와 로직을 분리함으로 테스트에 용이해지는 장점작은 시작전체 프로젝트에 적용되는것이 아닌 작은 부분(특정 하나의 뷰)에서 부분적으로 ReactorKit을 채택할 수 있음기존 프로젝트에 ReacotrKit을 적용시키고 싶어서 모든걸 갈아엎지 않아도 됨적은 타이핑물리적인 코드가 적게 필요하다고 한다.높은 추상화 수준을 가졌을듯ViewReactorKit에선 ViewControlle..

RxSwift(이하 Rx) 공식문서에 도배된 시퀀스란 단어, 계속해서 시퀀스에 대입하여 뭔가를 설명하는데 이해가 되지 않아 알아보기로 함시퀀스란?사전적인 의미: 연속적인 사건들이나 사건이나행동 등의 순서프로그래밍적 의미: 일련의 값이나 객체들이 특정 순서에 따라 나열되어 있는 구조단순한 예로 array,string, int 등이 모두 시퀀스이다.Rx에서 얘기하는 시퀀스란?비동기적으로 일련의 이벤트를 생성하는 스트림 또는 연속적인 데이터 흐름에 대해 이야기 하고 있는것으로 해석했다.계속 언급되는 이유?결국 Observerbal Sequence에 대한 이야기를 하고 싶었기 때문특히 RX에선 Observable Sequence(이하 옵저버블) 에 관한 차이점에 대해 특히 언급되는데RX의 옵저버블은 Swift의..

반응형 프로그래밍데이터 흐름과 변화의 전파에 중점을 둔 프로그래밍 패러다임데이터나 이벤트가 변경될 때 이러한 변경 사항이 자동으로 관련된 컴포턴트에 전파되도록 설계된 방식RxSwiftRxSwift는 swift를 위한 반응형 프로그래밍을 구현한 라이브러리비동기 코드를 보다 간결하고 효율적으로 작성할 수 있게 해줌우리가 항상 사용하던 escaping 키워드의 생략과 더불어 마치 리턴 값이 있는 함수를 사용하듯 편하게 비동기 코드를 작성 할 수 있는 툴.공식문서에서RxSwift의 의도는 관찰 가능한 객체와 이러한 비동기 작업을 변환하고 구성하는 메서드 모음 형태로 비동기 연산과 데이터 스트림을 쉽게 구성할 수 있도록 하는 것입니다.KVO 관찰, 비동기 작업, UI 이벤트 및 기타 데이터 스트림은 모두 시퀀스 ..
코디네이터 패턴(Coordinator Pattern)이란?코디네이터 패턴의 개념코디네이터 패턴은 앱에서 뷰 컨트롤러의 흐름을 관리하는 데 사용되는 설계 패턴입니다.해당 패턴의 주요 목적은 뷰 컨트롤러 간의 전환과 상호작용을 뷰 컨트롤러 자체가 아닌 별도의 코디네이터 객체에서 담당하도록 하는 것 입니다.코디네이터 패턴은 다음과 같은 방식으로 구현할 수 있습니다(다른 여러 방식 또한 존재합니다.)import UIKitpublic protocol Coordinator: AnyObject { var parentCoordinator: Coordinator? { get set } var childCoordinators: [Coordinator] { get set } var navigationCont..
개요바이너리 파일이란 말이 생소하게 다가와서 정리컴파일컴파일은 프로그램이 소스 코드를 읽어들여, 이를 기계가 이해할 수 있는 기계어로 변환하는 과정을 말합니다.소스 코드 (Source Code):개발자가 작성한 프로그래밍 언어 코드, 예를 들어, C, C++, Java, Python 같은 언어로 작성된 코드가 소스 코드입니다.소스 코드는 사람이 이해할 수 있는 형태의 텍스트로 되어 있으며, 컴퓨터가 직접 실행할 수 없습니다.컴파일 (Compile):컴파일러라는 프로그램이 소스 코드를 읽어들여, 이를 기계가 이해할 수 있는 기계어로 변환하는 과정을 말합니다.이 과정에서 소스 코드는 여러 단계(전처리, 컴파일, 최적화 등)를 거쳐 실행 파일 형태로 만들어집니다.바이너리 (Binary):컴파일 결과물로 생성된..