분류 전체보기

    [rxSwift] Filtering Operator 의 종류

    [rxSwift] Filtering Operator 의 종류

    Filtering Operator 의 종류 ignoreElements next 이벤트를 무시함 completed, error 같은 정지이벤트는 허용함. let publishSubject = PublishSubject() let disposeBag = DisposeBag() publishSubject .ignoreElements() // 모든 이벤트 무시 .subscribe({ print($0) }) .disposed(by: disposeBag) publishSubject.onNext("A") publishSubject.onNext("B") publishSubject.onNext("C") publishSubject.onCompleted() // A, B, C 는 출력되지 않고 무시됨 // onComplet..

    [rxSwift] Subject 를 wrapping한 Relay 사용법

    [rxSwift] Subject 를 wrapping한 Relay 사용법

    Relay rxSwift와 달리 Rxcocoa를 import 해야 함. Subject의 Wrapping 버전으로 Subject의 특성을 가진 채 변형됨. .onNext가 아니라 .accept으로 사용함. (accept안에 onNext가 구현되어있음) .error 와 .complete 에 대해서 방출 하지 않는다. 오로지 .accept 로 받기만 한다. error 와 complete 가 없기 때문에 해당 조건이 발생할 수 없으므로 에러가 나도 무시됨. 즉, 계속해서 살아있는 스트림임. UI Event 와 바인딩 하여 사용하기에 적합함. Dispose되기 전까지 살아있음. Publish Relay와 Behavior Relay가 있음. PublishRelay PublishRelay는 PublishSubject..

    [rxSwift] Subject 에 대한 이해와 종류

    [rxSwift] Subject 에 대한 이해와 종류

    Subject 실시간으로 Observable에 새로운 값을 수동으로 추가하고, subscriber에 방출하도록 하는 것. Hot Observable임. Observable이자 Observer의 성격을 지니고 있음. Observable의 성격으로 onNext의 형태로 수동으로 값을 추가할 수 있고 Observer의 성격으로 subscribe를 통해 방출함. Subject 의 종류 PublishSubject 빈 상태로 시작하여, subscribe 이후의 이벤트만을 subscriber를 통해 방출함. PublishSubject는 .completed, .error 이벤트가 발생할때까지, 즉 종료될때까지 subscribe한 이후부터 이벤트를 방출. PublishSubject 예시 let subject = Publ..

    [rxSwift] Dispose 는 왜 하는 걸까?

    [rxSwift] Dispose 는 왜 하는 걸까?

    dispose 구독(Subscribe)을 처리, 메모리 누수를 막기 위함. 모든 subscribe의 return 에는 Disposable를 방출함. 사용하지 않는 Observable을 메모리에서 해제하기 위함. Disposable 프로토콜 안에는 disposed func으로 사용하지 않는 Observable을 DisposeBag에 넣어 관리 할 수 있음. disposeBag 구독에 대해서 일일히 관리하는 것은 효율적이지 못하기 때문에, RxSwift에서 제공하는 disposedBag 타입을 이용 disposeBag에는 disposables를 가지고 있음, disposable은 dispose bag이 할당 해제 하려고 할 때마다 dispose()를 호출 Observable.of(1, 2, 3) .subsc..

    [rxSwift] Observable create 하는 법

    [rxSwift] Observable create 하는 법

    create Obseravble을 커스터마이징 하게 만드는 방법임. create는 escaping 클로저로, escaping에서는 AnyObserver를 취한 뒤 Disposable을 리턴한다. 여기서 AnyObserver란 generic 타입으로 Observable sequence에 값을 쉽게 추가할 수 있다. var disposeBag = DisposeBag() Observable.create { observer -> Disposable in observer.onNext(1) observer.on(.next(6)) observer.onCompleted() onberver.onNext(9) return Disposables.create() } .subscribe { print($0) } .dispose..

    [rxSwift] Observable subscribe 하는 법

    [rxSwift] Observable subscribe 하는 법

    observable의 기본적인 구독 방법 // 오로지 1(Int 타입)만을 방출 let observable = Observable.just(1) //observable 구독 observable.subscribe( onNext: { data in print(data) // 1 }, onError: { error in print(error) // error 시 error코드 방출 후 종료 }, onCompleted: { print("completed") // 성공적으로 완료되면 무엇도 방출하지 않고 종료 }, onDisposed: { print("dispose done") // 종료 후 disposed } ) //위 코드와 같은 맥락의 코드 let observable = Observable.just(1) v..

    [rxSwift] 기본적인 Observable 의 종류

    [rxSwift] 기본적인 Observable 의 종류

    just 오직 하나의 요소를 포함하는 Observable 시퀀스를 생성 Observable.just(1) // 1 // completed of 타입 추론을 통한 Observable 생성 Observable.of(1, 2, 3, 4, 5) // 1 // 2 // 3 // 4 // 5 // completed Observable.of([1, 2, 3, 4, 5]) // [1, 2, 3, 4, 5] // completed from 오직 array 형태의 element만 받음 Observable.from([1, 2, 3, 4, 5]) // 1 // 2 // 3 // 4 // 5 // completed empty 아무런 element를 방출하지 않음, completed 이벤트만 방출 Observable.empty(..

    [rxSwift] Observable 에 대한 이해

    [rxSwift] Observable 에 대한 이해

    Finite Observable Element을 방출한 뒤, 성공 또는 에러를 통해 종료되는 Observable 파일을 다운로드하는 일련의 시퀀스 시간에 흐름에 따라서 다운로드 시작 Infinite Observable 무한한 시퀀스 즉 Observable UI 이벤트는 무한하게 관찰할수 있는 시퀀스 (rxCocoa, binding) Hot Observable 뜨거워서 생성되자마자 이벤트를 방출 나중에 구독한 Observer는 구독 시점의 Observable 중간부분부터 구독할 수 있음 여러 Observer들이 동일한 Observable을 구독하면, 동일한 스트림의 이벤트 공유 가능 (Multicast) Subject를 사용하면 Cold Observable을 Hot Observable로 변환할 수 있음 마..

    [SwiftUI] KFImage placeholder 사용법

    [SwiftUI] KFImage placeholder 사용법

    KFImage placeholder 사용법 KFImage.url(URL(string:"")) .placeholder { Image("assetImage") .resizable() .aspectRatio(contentMode: .fill) .frame(width: UIScreen.main.bounds.width, height: 160) } .resizable() .aspectRatio(contentMode: .fill) .frame(width: UIScreen.main.bounds.width, height: 160)

    [SwiftUI] ObservableObject 강제 새로고침 하는 법

    [SwiftUI] ObservableObject 강제 새로고침 하는 법

    @StateObject 혹은 @EnvironmentObject 의 데이터에 따라 View가 최신화 되지 않는 경우 ObservableObject 클래스 내 @Published 데이터 변화를 강제로 보내는 법 class ExViewModel: ObservableObject { @Published data: String = "example" func example() { ..... self.data = "example change" //@Published 변수가 변동됨을 강제로 View에 알림 self.objectWillChange.send() } }