본문 바로가기

Swift

(53)
[🔥Rx뿌셔] Subject - BehaviorSubject Behavior Subject BehaviorSubject는 PublishSubject와는 다르게 초기값을 가지고 시작한다. 다만, 그 초기값이 매번 일정한 것이 아닌 가장 마지막에 방출되었던 값이 초기값으로 지정된다. 이를 그림으로 확인하면 아래와 같다. -> Observable을 제일 처음 구독하는 구독자는 설정해준 초기 값으로 시작을 하게 되고, 그 다음구독자 부터는 구독하기 직전에 방출되었던 값으로 시작을 하게 된다. 코드로 구현하면 아래와 같다. let behaviorSubject = BehaviorSubject(value: "난 초기값이 있지롱") BahaviorSubject는 항상 초기값을 가지고 시작하기 때문에 초기화하는 방식도 PublishSubject와 조금 다르다. 이런식으로 초기화 ..
[🔥Rx뿌셔] Subject - Publish Subject Subject Subject는 Observable이자, Observer인 존재이다. 값을 수동으로 추가할 수 있으며 해당 값을 이미 구독 중인 subscriber에 emit할 수 있다. 예시 코드를 보자. ⬇️ // 1 let subject = PublishSubject() // 2 subject.onNext("듣고 있니 .. ?") // 3 let subscriptionOne = subject .subscribe(onNext: { (string) in print(string) }) // 4 subject.on(.next("얌마.")) // print: 얌마. // 5 subject.onNext("듣고 있냐고.") // print: 듣고 있냐고. 위의 코드에서 주석으로 표시한 숫자의 흐름은 아래와 동일하..
[🔥Rx뿌셔] Hot Observable VS Cold Observable Observable은 이벤트를 emit하는 요소이다. 그리고 이 Observable의 형태/종류는 크게 두가지로 나눌 수 있다. Hot Observable 🔥 은 구독 여부에 관계 없이 요소를 방출해주는 Observable, Cold Observable🧊 은 구독이 되어야지 비로서 요소가 방출이 되는 Observable 이다. 🧊 Cold Observable 일단 Cold Observable🧊은 우리가 일반적으로 지금까지 사용해오던 Observable이다. 즉 of, just, from, 그리고 커스텀하게 만든 Observable 에 별다른 처리를 하지 않았다면 모두 Cold Observable🧊 이다. 이 Observable은 구현을 하고 나서, 구독을 하지 않으면 요소가 절대 방출되지 않는다. 이름처..
[RxCocoa] 코코아 맛보기 .. 홀짝 .. ☕️ 개념과 함께 RxCocoa로 실시간 검색 화면을 만들어보자 !! RxCocoa란? RxSwift를 기반으로 만든 것이 RxCocoa인데 .. 왜 RxSwift가 있는데 RxCocoa가 만들어졌냐?! 이름에서 알 수 있는 것처럼 RxCocoa는 애플 환경의 앱을 제작하기 위한 도구들을 모아놓은 Cocoa Framework를 더 잘 사용할 수 있도록 만들어 놓은 Rx이다. (Rx+Cocoa Framework라고 생각할 수 있다.) RxCocoa는 RxSwift를 기반으로 만들어진 라이브러리이기 때문에, 사용하기 위해서는 SPM 또는 CocoaPod과 같이 의존성 도구를 통해서 별도로 추가해야한다. RxCocoa는 Cocoa Touch 프레임워크에 Reactive(반응형)의 장점을 더해준 라이브러리이다. Rx..
[RxSwift] Rx+MVVM으로 로그인 화면을 만들어보자. Rx+MVVM 예제를 살펴보면 주로 검색에 대한 테이블 뷰 화면, 또는 로그인 화면이 많은 것을 알 수 있는데, 실시간으로 반응해서 대응하는 화면이 Rx의 가장 큰 장점(반응형)을 돋보이게 할 수 있어서 그런 것 같다. 그러니까 한번 가보자고 ~ 먼저 화면부터 살펴보면 아래와 같다. 이렇게 위와 같이 이메일을 입력할 수 있는 텍스트필드와, 비밀번호를 입력할 수 있는 텍스트 필드 2개, 그리고 로그인 버튼으로 구성되어 있다. 🌱 MVVM 먼저 프로젝트 구성을 살펴보면 다음과 같다. MVVM 패턴이므로 Model-View-ViewModel의 구조로 구성되어 있다. #Model Model에는 위와 같이 로그인 화면에서 필요한 데이터 모델을 만들어준다. 이 때 우리는 크게 두가지 모델이 필요하다. ✅ 바로 로그..
[🌱SeSAC] Observable VS Subject, Drive & Relay 오늘 글은 .. 기승전결이 있기 때문에 .. 차근차근 .. 따라가보자 .. ! 로그인 화면을 만들어보자. 이렇게 이름을 입력하는 텍스트 필드와, 텍스트 필드에 입력하는 값에 따라서 유효성 검사를 하는 경고 레이블, 그리고 버튼으로 UI를 만들 수 있다. 이 때의 로직은, 텍스트 필드에 8글자 이상 입력해야 경고 레이블이 사라지고 버튼이 활성화 되는 것이다. 그렇다면 우리는 아래와 같이 코드를 입력할 수 있다. nameTextField.rx.text // String? .orEmpty // String .map { $0.count >= 8 } // Bool .bind(to: stepButton.rx.isEnabled, validationLabel.rx.isHidden) .disposed(by: dispos..
[🌱SeSAC] Observable/Observer, Subject, Relay Observable & Observer 데이터를 변경해줄 수 있는 이벤트가 있고, 이 이벤트에 따라서 변경되는 뷰, 로직이 있다. 즉, 이벤트를 방출할 수 있는 Observable이 있고, 이벤트를 처리하는 Observer가 있다. Observable과 Observer를 통해 데이터의 흐름(= Stream)을 통제할 수 있고 Operator를 통해 Stream을 변경, 조작할 수 있다. 사용자에게 텍스트 필드로 입력값을 받아서, 해당 입력값을 닉네임을 지정한다고 할 때, 그림으로 표현하면 아래와 같다. 그리고 코드로 구현하면 아래와 같이 작성할 수 있다. simpleTextField.rx.text .orEmpty .withUnretained(self) .bind { vc, value in vc.nickn..
[🔥Rx뿌셔] Subject VS Observable Subject VS Observable Subject는 Observable과 Observer의 역할을 모두 할 수 있는 Observable이라고 생각하면 된다. Observable이나 Subject모두 이벤트를 emit하므로 subscribe 할 수 있다. 다만, subscribe에서 차이가 발생하는데, Subject는 multicast 방식이므로 여러 개의 Observer를 subscribe할 수 있다. 단순 Observable은 unicast 방식이므로 observer 하나만을 subscribe할 수 있다. Observable - unicast let observableInt = Observable.create { observer in observer.onNext(Int.random(in: 1...1..