[iOS] 낯선 녀석에게서 익숙한 향기가 난다

유인호·2024년 8월 8일
1

iOS

목록 보기
60/64

0. 서론

회사에서 Combine을 쓰면 딱 좋겠다 싶어 Combine을 도입했다. 사실 콤바인은 잘 몰라서 GPT한테

RxSwift에서 ~~이런거는 Combine에서는 뭐냐?

라고 물어보며 사용하고 있다.

사용하는 도중에 개인적으로 코드에서 [weak self]를 보는걸을 굉장히 싫어하는데, combine에서는 RxSwift처럼 weak self를 숨겨주는게 없어서 직접 구현해 보았다.

1. 익숙한 향기

예전에 내가 RxSwift를 사용하면서 썼던 코드 중 하나를 가져오자면,

input.inputIntroduceText
			.orEmpty
			.bind(with: self) { _, value in
				outputNextButtonIsEnabled.accept(value.count >= 10)
			}.disposed(by: disposeBag)

2. 낯선 녀석

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 }을 코드에서 안봐도 되게하여 스트레스가 사라지고 가족의 평화와 안녕을 지킬 수 있을 것이다.

profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th

2개의 댓글

comment-user-thumbnail
2024년 8월 9일

약한 자신 왜 안좋아하시나요?

1개의 답글