회고

[나는 바보다 2] 이상한게 있으면, 관련 클래스를 다 찾아보자

최지철 2023. 11. 16. 03:04
반응형

접니다

 

0.들어가기 앞서

나는 바보다 시리즈는 제가 개발과정중 너무나도 당연하면서도 어처구니 없는 실수를 했던것을 기록하여 스스로 반성하고자 만든 시리즈입니다.

 

1. 나는 바보다.

클린아키텍처 + MVVM 과 RxSwift를 적용해서 프로젝트 리팩토링중, 서비스 -> 레포지 -> 유스케이스 -> 뷰모델 까지는 데이터가 다 잘 전달 되는데.. 뷰컨에서 구독을 해도 바인딩을 해도 정보가 나타나지 않는것이었다... 2시간동안 잡고 있었는데.. 하...

 

2. 다시는 바보가 되지말자.

범인은 베이스 뷰컨트럴로에 viewDidLoad에 binding함수를 넣지 않은 것 이었다.

 
class BaseViewController: UIViewController {
    var disposebag = DisposeBag()
    func layout(){}
    func configure(){}
    func addview() {}
    func binding() {}

    // MARK: 탭시 키보드 내리기
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        view.endEditing(true)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .white
        self.configure()
        self.addview()
        self.layout()
        self.binding()  <--- 요놈을 안넣고잇었음 ㅎㅎ..
    }

 

class HomeViewModel: ViewModelType {
    
    let homeInfo = PublishSubject<PerfumeDataDTO>()
    let commentLabelTitle = PublishSubject<String>()
    let usecase: HomeUseCaseProtocol
    var disposeBag = DisposeBag()
    
    struct Input {
        
    }
    
    struct Output {

    }
    
    func transform(input: Input) -> Output {
        let output = Output()

        return output
    }
    
    init(usecase: HomeUseCaseProtocol) {
        self.usecase = usecase
    }
    
    func updateHomeInfo() {
        print("뷰모델 - updateHomeInfo 호출")
        usecase.getHomeInfo()
            .subscribe(onSuccess: { [weak self] info in
                print("뷰모델에 정보 들어옴")
                self?.homeInfo.onNext(info)
            }, onFailure: { error in
                print("에러 발생: \(error)")
            })
            .disposed(by: disposeBag)
    }
}
        viewModel.homeInfo
            .withUnretained(self)
            .bind(onNext: { info in
                print("뷰컨에서 정보감지: \(info)")
            })
            .disposed(by: disposebag)

 


ㅋㅋㅋㅋㅋprint로 디버깅 사투의 흔적... 하.. 그래도 다행이다 

 

반응형