결론

1.code

  1. AS-IS

    requestAuthCodeResult.map { result  -> (Bool,String?) in
                switch result{
                case .success(let data):
                    if data.status == 200, data.message == UserConst.SUCCESS{
                        return (true,nil)
                    }else{
                        return (false, data.message)
                    }
                    
                case .failure(let error):
                    return (false ,error.localizedDescription)
                }
            }.bind(to: self.requestMailCode)
                .disposed(by: bag)
    
    vm.requestMailCode.filter{$0.0}
                .bind(onNext:{[weak self] result in
                    print(result)
                    guard let self = self else{return}
                    self.emailRequsetSuccess()
                }).disposed(by: bag)
    

    viewModel 에서 network 통신결과를 PublishRelay로 바인드 해준뒤 viewcontroller에서 UI를 수정하는 코드를 작성함. (self.emailRequstSuccess() 에서 수정함.)

    오류발생

    Untitled

    → UI수정이 메인쓰레드가 이닌곳에서 발생했다는 오류

    PublishRelay코드를 Signal로 수정후 정상적으로 동작함.

viewModel

requestMailCode = requestAuthCodeResult.map { result  -> (Bool,String?) in
            switch result{
            case .success(let data):
                if data.status == 200, data.message == UserConst.SUCCESS{
                    return (true,nil)
                }else{
                    return (false, data.message)
                }
                
            case .failure(let error):
                return (false ,error.localizedDescription)
            }
        }.asSignal(onErrorJustReturn: (false, "잠시후 다시 시도해 주세요"))

viewController

vm.requestMailCode.filter{$0.0}
            .emit(onNext:{[weak self] result in
                print(result)
                guard let self = self else{return}
                self.emailRequsetSuccess()
            }).disposed(by: bag)