From cfe8190cecc9c25eca3c9defe1184ce68fea68ed Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov <> Date: Sat, 1 May 2021 09:27:04 +0300 Subject: [PATCH] refactor: replace unsafe withUnretained with weak self --- .../Classes/Search/BaseSearchViewController.swift | 15 ++++++--------- Sources/Classes/Search/BaseSearchViewModel.swift | 10 ++++------ 2 files changed, 10 insertions(+), 15 deletions(-) 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)