sink handleEvents(receiveOutput: ) receive(on: ), subscribe(on: ) 1. sink 애플 개발자 문서를 보면 sink 란 클로저 기반의 동작이 있는 subscriber를 절대 실패하지 않게 하는 publisher와 연결하는 것 그렇기 때문에 에러 타입은 Never 일때만 가능(그래서 회사 subject 에러 타입이 죄다 Never인 것) func sink(receiveValue: @escaping ((Self.Output) -> Void)) -> AnyCancellable Return Value 수신 된 값의 할당을 종료할 때 사용하는 Cancellable 인스턴스를 리턴한다. 결과를 할당해제 한다면 sumbscription stream을 해제하게 된다. ..
1. Dynamic Framework와 Static Framework의 차이 두 개의 차이는 "컴파일된 코드를 참조하는 방식"에 있습니다. Dynamic framework는 라이브러리에 대한 참조만 포함하고, Static Framework는 라이브러리 코드가 모두 포함되어 있습니다. Dynamic Framework 장점: Framework 내에 이미지나 뷰같은 리소스 파일 혹은 Bundle을 Embeded 할 수 있음 링크를 참조하기에 Static Framework에 비해 메모리가 자유로움. 빌드 속도가 단축 단점: 디버그시 필요한 dSYM 파일을 프레임워크 개발자가 제공해야함 Static Framework에 비해 런타임상 속도가 느림 Static Framework 장점: 앱 실행파일에 직접 링크되어 있..
iOS 개발을 진행할 때 Util이라는 폴더를 만들어 작업을 진행하는 경우가 많다. 나도 Util에는 프로젝트 전역에서 쓰일 것 같은 것들을 넣어놓고는 하는데 그렇게 따지면, Extension도 전역에서 쓰니까 Util 아니야? 라는 생각이 들어서 Util에는 어떠한 것들이 들어가야 하는지 정리해보고자 한다. 보통 Util은 문자열 관련, 랜덤값 생성, 날짜 및 시간 처리 등 프로젝트 전역에서 사용되는 틀정 로직이나 독립적인 기능을 구현해둔 곳이라고 한다. 밑에 블로그에 따르면 Util에 속하는 파일들의 특징으로는 세가지가 있는데, 1. 프로젝트 전역에서 사용될 수도 있는 기능 2. 특정 로직이나 독립적인 기능 3. 가능하면 어떤 상태를 가지지 않는 기능 그리고 Util에 속해있는 요소들은 1. 수정을 ..
Git 명령어 원격 main 브랜치에서 현재 브랜치로 변경사항 받아오기 작업 중인 브랜치에서 Git pull origin main 작업중인 파일 내 브랜치에 올리기 Git add. Git commit -m “asdfsdf” Git push origin feature/accountMain git checkout A git merge B B 브랜치에서 일어난 변경사항이 A 브랜치에 합쳐짐 // .xcodeProj에서 conflict 발생시 터미널로 파일명.xcodeproj - 내가 작업중인 코드가 변동사항이 별로 없을 경우 그냥 스테이지 삭제 후 pull 받아오면 됨 // 1. A 브랜치에 변동사항이 있는지 모르고 이미 커밋을 한 상황이라면 가장 최근 커밋을 취소 git reset HEAD^ // 2. 로컬..
Combine을 그래도 공부하다 보니까 이제서야 기본적인 틀이 갖춰진 것 같다. 이때까지 비동기 프로그래밍을 할 줄 안다고 이력서에 거짓말을 치고 있었다는 것 또한 깨닫게 되었다..허허허허허헣 Combine은 다음과 같이 크게 3가지로 이루어져 있다고 말했다. 1. Publisher 2. Subscriber 3. Operator Publisher, Subscriber에 관련된 내용은 어느정도 이해가 됐기 때문에 Operator의 정의에 대해서 알아보자 Operator는 그림과 같이 Publisher가 이벤트를 방출할 때 그 이벤트를 가공해서 Subscriber에게 전달해주는 역할을 한다. 좀 더 자세히 설명하면 다음과 같다. - Publisher 프로토콜을 채택한다. - 선언적이므로 값 타입이다. - 값..
오늘은 간략한 예제와 함께 DiffableDataSource의 실제 사용법에 대해 살펴보는 시간을 갖겠다. Section, Item 클래스 생성하기 UICollectionViewDiffableDataSource는 Section identifier, Item identifier 이렇게 두 개의 generic 타입을 가진다. 우선 Section을 생성하겠다. 1. Section 생성하기 Section Type은 가변적이라면 Class 타입으로 생성하고, 고정된 섹션을 가진다면 enum 타입으로 생성해도 된다. class Section: Hashable{ let id = UUID() var title: String var people: [Person] init(title: String, people: [Per..
Apple에서는 프로토콜로 미리 구현한 Publisher가 존재한다. 오늘은 해당 Publisher에 대해 살펴보고, 그 중 Future에 대해 자세히 알아보는 시간을 갖고자 한다. Publisher를 간략하게 설명하면, Subscription을 만들고 Subscriber들에게 이벤트를 방출하는 타입을 위한 프로토콜이다. 그리고 Apple에서 이러한 Publisher를 프로토콜로 미리 구현했는데, 다음과 같다. 1. Just 2. Future 3. Deffered 4. Empty 5. Fail 6. Record 7. AnyPublisher 회사 코드에서 자주보이는 것들은 Future, AnyPublisher정도 였던 것 같은데 생각보다 많은 Publisher들이 존재했다. 오늘은 간단하게 Just를 살펴..