XELP
'SWIFT' 태그의 글 목록

SWIFT

Developer/iOS

ReactorKit 샘플코드

기본적으로 나는 MVVM 구조를 활용하여 앱의 베이스를 구성하고 앱을 짜지만, 예전부터 input-output 구조를 활용해왔다. 그렇다면, 요즘 대세라는 ReactorKit의 활용해본다. ReactorKit이란 근래의 iOS를 위시한 많은 개발 트렌드는 ReactiveX를 기반으로 한다. ReactorKit은 RxSwift를 기반으로 하며, 그렇기에 ReactorKit 자체가 RxSwift를 포함하고 있기도 하다. 따라서 기본적으로 Swift, RxSwift를 이해하고 있어야 하며, 필자의 의견으로는 input-output 패턴을 정형화하기에 좋은 라이브러리라고 생각한다. 구조 ReactorKit의 핵심은 방향이 단방향이라는 것이다. 사용자의 Action은 Reactor로 전달되며, 내부에서 Obser..

Developer/iOS

CustomView With IBDesignable

서론 커스텀뷰를 만드는 여러 방법이 존재하지만, 아직까지 Xib를 통한 뷰를 나는 선호한다. 이 포스팅에 내가 주로 쓰는 형태의 커스텀뷰를 미리 게시해둔다. Swift UIView를 상속받은 뷰이다. xib를 사용하는 형태라면 awfkeFromNib()가 불리며, frame을 정하면서 초기화되는 형태라면 required init?(coder:)를 만들어둬야 한다. Interface Builder File's Owner 에 해당 class 명을 등록해둔다. IBDesignable, IBInspectable 설정에 따라 간결하게 레이아웃을 구성할 수 있다.

Developer/iOS

[Combine] 2. Subject

들어가기 1편에서 기초적인 부분을 알아보았다면, 2편부터는 좀 더 간편하게 만든 컴포넌트들을 알아보고자 한다. Subject Rx에서 보았던 그 Subject와 거의 같다고 볼 수 있다. 자기 자신이 데이터를 가지고 있을 수 있으면서도, 동시에 데이터를 방출하는, 즉 Publisher와 Subscriber가 동시에 될 수 있다. Rx에서 PublishSubject와 BehaviorSubject가 존재했었다. Combine에서는 PassthroughSubject와 CurrentValueSubject가 이들을 대신한다. 각각 초기값이 없는 것과 있는 것 역시 Rx와 동일한 점이다. 다만, BehaviorSubject는 구독 한 시점에 초기값 또는 이후에 발행된 현재의 최신값을 전달해주는 반면, Current..

Developer/iOS

Generic, 그리고 Some (2/2)

이전 글에 이어, 시간이 날 때 Some을 조금 더 자세히 알아봤다. 오랫동안 코드를 들여다보며 조금 더 이해할 수 있게 되었다. 샘플코드 샘플코드는 기존과 거의 같지만, 간단히 설명해보면 Vehicle 프로토콜이 존재하며, 이를 만족하는 클래스 Car, Bus가 존재한다. TTT라는 구조체에서 some이라는 키워드를 통해 내부소스에 의해 Car(), Bus()로 형태가 정해졌으나 some Vehicle이 출력이기에 "Vehicle이라는 프로토콜을 준수하는 무언가" 라는 형태로 리턴이 되게 된다. 즉, 그렇기에 소스 내부에서 타입이 결정되는 구조이기에 Generic의 역구조라는 말이 나오는 것으로 이해된다. 실제사용 및 정리 실제 사용하는 부분이다. vehList는 어떻게 생겼든지 간에 Vehicle 프..

Developer/iOS

Generic, 그리고 Some (1/2)

Generic? Some? 보통 제네릭은 다른 언어를 쓰면서도 다룰 경우가 많이 있어 어느정도 알고 있지만, some 의 경우 SwiftUI를 공부하며 간간히 본 정도였다. 아직 완벽하게 이해를 한 건 아니지만, 이해가 된 만큼 내용을 이 포스팅에 적어본다. 샘플코드 위와 같은 struct가 존재한다고 하자. Car와 Bus는 Vehicle 프로토콜을 준수하도록 만들어져 있다. 각기 차종에 따라 가스를 충전하는 방식을 나눠놓았다. 만약 이를 다른 클래스에서 세차를 한다고 가정하자. 위 코드처럼 wash(vehicle:)을 생성했다. 제네릭에 따라 파라미터로 Vehicle 프로토콜을 준수하는 것만 들어올 수 있다. wash(vehicle: Car()) 식으로 실행할 수 있다. 이를 some으로 불투명한 타..

Developer/iOS

CoreData

Coredata란 Coredata는 Apple Framework의 일종이다. 데이터를 저장함에 있어 영구적인 데이터를 저장할 수 있다. UserDefaults가 간단한 데이터를 저장한다면, Coredata는 대용량의 데이터를 저장하는 데에 적합하다. 그렇다고 하여 Database인가? 는 또 아니다. Coredata가 할 수 있는 여러 기능 중 Persistence가 RDBMS인 SQLite로 지원된다. 정확하게는, Coredata는 앱의 모델 계층이며 객체 그래프를 관리하는 Framework이다. 데이터 저장을 위한 Coredata 사용법 Coredata를 파일로 추가하고 Model을 추가한다. Entity는 마치 테이블명처럼, Attribute를 각각의 Column으로 생각하면 편하다. 이후 우측 퀵..

Developer/iOS

Alamofire + RxSwift

RxSwift를 공부하면서, Alamofire와 RxSwift의 결합 개인 라이브러리를 개발하기로 마음먹었다. RxAlamofire라는 좋은 라이브러리가 따로 존재하는 모양이지만, 개인적으로 개발한 라이브러리가 존재함과 동시에 기존 라이브러리와의 통합을 모색했다. (아마 이렇게 하는 것이 나에게 있어서도 더 낫지 않을까..) 기존 라이브러리의 형태 기존에는 위와같은 형태로 개발에 사용해왔다. Request에 필요한 정보를 가진 Requester class와, Request 관련 옵션을 포함한 BaseRequestOption, 그리고 성공과 실패에 사용할 Closure를 따로 마련했다. 이 Closure 형식을 제거하고 RxSwift를 도입해보기로 했다. RxSwift를 도입해보자 먼저 init에서 바로 ..