본문 바로가기
회고

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

by 최지철 2023. 11. 16.
728x90
반응형

접니다

 

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로 디버깅 사투의 흔적... 하.. 그래도 다행이다 

 

728x90
반응형