diff --git a/Sources/Classes/Search/BaseSearchViewController.swift b/Sources/Classes/Search/BaseSearchViewController.swift index bc2cab11..c3d1fc87 100644 --- a/Sources/Classes/Search/BaseSearchViewController.swift +++ b/Sources/Classes/Search/BaseSearchViewController.swift @@ -58,16 +58,14 @@ where ViewModel: BaseSearchViewModel { open override func bindViews() { super.bindViews() viewModel.itemsViewModelsDriver - .withUnretained(self) - .drive(onNext: { owner, viewModels in - owner.handle(itemViewModels: viewModels) + .drive(onNext: { [weak self] viewModels in + self?.handle(itemViewModels: viewModels) }) .disposed(by: disposeBag) Observable.merge(searchResults, resetResults) - .withUnretained(self) - .subscribe(onNext: { owner, state in - owner.handle(searchResultsState: state) + .subscribe(onNext: { [weak self] state in + self?.handle(searchResultsState: state) }) .disposed(by: disposeBag) @@ -153,9 +151,8 @@ where ViewModel: BaseSearchViewModel { open var searchResults: Observable { viewModel.searchResultsDriver .asObservable() - .withUnretained(self) - .map { owner, viewModels -> SearchResultsViewControllerState in - owner.stateForUpdate(with: viewModels) + .compactMap { [weak self] viewModels in + self?.stateForUpdate(with: viewModels) } } diff --git a/Sources/Classes/Search/BaseSearchViewModel.swift b/Sources/Classes/Search/BaseSearchViewModel.swift index 224f4ed9..19a4f85f 100644 --- a/Sources/Classes/Search/BaseSearchViewModel.swift +++ b/Sources/Classes/Search/BaseSearchViewModel.swift @@ -36,9 +36,8 @@ open class BaseSearchViewModel: GeneralDataLoadingViewModel open var itemsViewModelsDriver: Driver<[ItemViewModel]> { loadingResultObservable - .withUnretained(self) - .map { owner, items in - owner.viewModels(from: items) + .map { [weak self] items in + self?.viewModels(from: items) } .flatMap { Observable.from(optional: $0) } .share(replay: 1, scope: .forever) @@ -55,9 +54,8 @@ open class BaseSearchViewModel: GeneralDataLoadingViewModel .flatMapLatest { [weak self] searchText, items -> Observable in self?.search(by: searchText, from: items).asObservable() ?? .empty() } - .withUnretained(self) - .map { owner, items in - owner.viewModels(from: items) + .map { [weak self] items in + self?.viewModels(from: items) } .flatMap { Observable.from(optional: $0) } .share(replay: 1, scope: .forever)