ReactiveX An API for asynchronous programming with observable streamsasynchronous programmingRx가 얘기하는 비동기 프로그래밍이란?앱의 전체적인 사용관점에서 비동기라고 한다.→ 코드의 실행 순서가 정해져있지 않다.→ 사용자의 입력 등 다양한 외부적인 요인에 따라서 코드는 다르게 실행 될 수 밖에 없음: Line by line 으로 실행되는 것이 불가능하다.Rx에서는 아래의 기능들을 포함하여 비동기 프로그래밍이라고 한다.Event - Touch Up InsideClosureGCDDelegate PatternNotification CenterObservable Streams(Observable Sequence)Observable, Ob..
iOS 13이하에는 인덱스 기반으로 CollectionView와 TableView를 다루었다면, iOS 13 이상부터는 레이아웃과 데이터기반으로 구성할 수 있는 방법이 등장하였다. 1. 레이아웃 만들기let collectionView = UICollectionView(frame: .zero, collectionViewLayout: createLayout())private func createLayout() -> UICollectionViewLayout { var configuration = UICollectionLayoutListConfiguration(appearance: .plain) configuration.backgroundColor = .clear return UICollecti..
왜 사용할까?Debug / Release 최적화 기술swift/docs/OptimizationTips.rst at main · swiftlang/swiftswift는 기본적으로 각 파일을 개별적으로 컴파일한다.그래서 WMO(Whole module optimization)은 서로 엮여져 있는 파일들을 하나의 파일처럼 실행한다.컴파일 시간은 오래걸릴 수 있지만 컴파일 되고 나서는 실행 자체는 빨라질 수 있다. Dynamic Dispatch / Static Dispatch런타임 시점에 확정(Dynamic) 컴파일 시점에 확정(Static Dispatch)Dynamic Dispatch: classStatic Dispatch: struct, enum클래스 안에 있는 메서드는 dynamic Dispatch로 동작하..
1. 작은 크기에서 크게 커지는 애니메이션정해진 위치에서 커지는 것이라 레이아웃은 변경하지 않음//크기를 10분의 1로 줄임logoImageView.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) 1-1) 회전하면서 원상태로 만들기 UIView.animate(withDuration: 0.5, delay: 1, options: .curveEaseIn){ self.logoImageView.transform = CGAffineTransform(rotationAngle: 180)} completion: { _ in self.animationEmailTextField()} 1-2) 원상태로 크기 만들기UIView.animate(withDuration: 0.5..
Design Pattern?특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이고, 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는데에 쓰이는 서술이나 템플릿으로 시스템을 디자인할 때 공통된 문제들을 해결하는데에 쓰이는 형식화 된 가장 좋은 관행이다.→ 정해진 형식을 따를 필요는 없지만(필수는 아님) Design Pattern 형식에 맞게 구성하면 쉽게 형식에 짜여져 있어 프로그래밍 가이드라인이라 생각하면 쉽다.출처 : https://ko.wikipedia.org/wiki/소프트웨어_디자인_패턴 디자인 패턴의 가장 큰 목적 >>>> 유닛 테스트 깔끔한 코드 분리 보다는, UI 와 분리하여 기능을 테스트 하는데 있어 독립적으로 실행하기 위해 나누는것이 디자인 패턴의 가장 큰 목적이다.1..
비즈니스 로직?우리 눈에 보이지 않아도 되는 기능들ex) 로그인 관련 기능버튼을 눌렀을 때 판단하는 기능들→ “@” 기호가 있는지, 한글이 섞여 있는지 등 판별하는 기능ex) 상품 구매하기 버튼구매를 못했을 때를 판단하는 기능들→ 체크카드 만료, 계좌에 돈이 없음 등..하나의 액션에 많은 기능들이 구현되어있음 → viewmodel로 빼보자 @objc private func amountChanged() { print(#function) //1. optional binding guard let amountText = amountTextField.text else { return } //2. isEmpty? if amo..
UIButtonproperty/methodtype설명참고showsMenuAsPrimaryActionBool버튼을 길게 누르지 않고 탭만 하면 나오게끔 하는 속성 layoutIfNeeded()-UI를 업데이트 하라는 queue에 뒷쪽에 넣는것이 아니라, 맨 앞쪽에 넣어서 곧바로 UI가 변경되기를 기대할수있는 메소드https://ios-development.tistory.com/986UILabelproperty/methodtype설명참고clipsToBoundsBooltrue → subview가 view의 경계를 넘어갈 시 잘림 false → 경계를 넘어가도 잘리지 않게 되는 것label에 cornerRedius를 주려고 하면 안되는데, 그때 바꿔줘야한다. subview에 무언가가 채워질 때, view의 둥글..