회사에서 Combine을 쓰면 딱 좋겠다 싶어 Combine을 도입했다. 사실 콤바인은 잘 몰라서 GPT한테
RxSwift에서 ~~이런거는 Combine에서는 뭐냐?
라고 물어보며 사용하고 있다.
사용하는 도중에 개인적으로 코드에서 [weak self]를 보는걸을 굉장히 싫어하는데, combine에서는 RxSwift처럼 weak self를 숨겨주는게 없어서 직접 구현해 보았다.
예전에 내가 RxSwift를 사용하면서 썼던 코드 중 하나를 가져오자면,
input.inputIntroduceText
.orEmpty
.bind(with: self) { _, value in
outputNextButtonIsEnabled.accept(value.count >= 10)
}.disposed(by: disposeBag)
extension Publisher {
func sink<Object: AnyObject>(
with obj: Object,
receiveCompletion: @escaping (Subscribers.Completion<Failure>) -> Void,
receiveValue: @escaping (Object, Output) -> Void
) -> AnyCancellable {
sink { [weak obj] completion in
guard obj != nil else { return }
receiveCompletion(completion)
} receiveValue: { [weak obj] value in
guard let obj = obj else { return }
receiveValue(obj, value)
}
}
func sink<Object: AnyObject>(
with obj: Object,
receiveValue: @escaping (Object, Output) -> Void
) -> AnyCancellable where Failure == Never {
sink { [weak obj] value in
guard let obj = obj else { return }
receiveValue(obj, value)
}
}
}
bluetoothManager.deviceName
.sink(with: self) { owner, value
print(value)
}
새싹 했던 사람들이라면 저 with와 owner... 아주 지겹겠지만..
이런식으로 꼴보기 싫은 [weak self]와 guard let self else { return }을 코드에서 안봐도 되게하여 스트레스가 사라지고 가족의 평화와 안녕을 지킬 수 있을 것이다.
약한 자신 왜 안좋아하시나요?