'I have 2 view controllers with same logic but one of them is not working

I have 2 view models TransferViewModel which has the respective TransferViewController for making Local Transactions from a model LocalTransactionRequest and i have BankTransferViewModel which has a model BankTransactionsRequest, the first one is working but the second one is not, both view controllers are supposed to perform segue to another view controller ConfirmViewController, but the second one (BankTransferViewController) is not working

[This one is TransferViewController][1]

    private func setupViewModel() {
    viewModel.isTransfer = isTransfer
    viewModel.loan = loan
    viewModel.getBalance()
    
    
    transferButton.rx.tap.asObservable().subscribe(onNext: { [weak self] _ in
        guard let strongSelf = self else { return }
        if let isVerified = UserManager.shared.get()?.IsVerified.value, isVerified{
            strongSelf.viewModel.phoneNumberText.accept(strongSelf.phoneNumberTextField.text ?? "")
            strongSelf.viewModel.amountText.accept(strongSelf.amountTextField.text ?? "")
            strongSelf.viewModel.transfer()
        }else{
            strongSelf.showVerificationAlert()
        }
    }).disposed(by: disposeBag)
    
    viewModel.accountInfo.asObservable().subscribe(onNext: { [weak self] accountInfo in
        if let account = accountInfo{
            guard let strongSelf = self else { return }
            strongSelf.accountInfo = account
            let request = LocalTransactionRequest(Identification: UserManager.shared.identification ?? "", Amount: Double(strongSelf.amountTextField.text!)!, ReceiverPhoneNumber: strongSelf.phoneNumberTextField.text!, IDBankAccount: UserManager.shared.defaultBankAccountId ?? -1, IsFromTransfer: strongSelf.isTransfer, Description: strongSelf.descriptionTF.text!)
            strongSelf.transferRequest.accept(request)
            strongSelf.performSegue(withIdentifier: "segue_toConfirmTransfer", sender: account)
        }
    }).disposed(by: disposeBag)
}

[This one is BankTransferViewController][2]

    private func setupViewModel(){
    viewModel.isTransfer = isTransfer
    viewModel.getBalance()

    transferButton.rx.tap.asObservable().subscribe(onNext: { [weak self] _ in
        guard let strongSelf = self else { return }
        if let isVerified = UserManager.shared.get()?.IsVerified.value, isVerified{
            strongSelf.viewModel.bankNumberText.accept(strongSelf.bankNumberTextField.text ?? "")
            strongSelf.viewModel.firstName.accept(strongSelf.firstNameTextField.text ?? "")
            strongSelf.viewModel.lastName.accept(strongSelf.lastNameTextField.text ?? "")
            strongSelf.viewModel.amountText.accept(strongSelf.amountTextField.text ?? "")
            strongSelf.viewModel.descriptionText.accept(strongSelf.descriptionTF.text ?? "")
            strongSelf.viewModel.transferNational()
        }else{
            strongSelf.showVerificationAlert()
        }
    

    }).disposed(by: disposeBag)
    
    viewModel.transferRequest.asObservable().subscribe(onNext: { [weak self] bankRequest in
        if let bank = bankRequest{
            guard let strongSelf = self else { return }
            strongSelf.bankTransferRequest = bank
            let request = BankTransactionRequest(Identification: UserManager.shared.identification ?? "", ReceiverBankAccount: strongSelf.bankNumberTextField.text!, ReceiverFirst: strongSelf.firstNameTextField.text!, ReceiverLast: strongSelf.lastNameTextField.text!, Amount: Double(strongSelf.amountTextField.text!)!, Description: strongSelf.descriptionTF.text!)
            strongSelf.nationalTransferRequest.accept(request)
            DispatchQueue.main.async {
                strongSelf.performSegue(withIdentifier: "segue_toConfirmTransfer", sender: bank)
            }
        }
    }).disposed(by: disposeBag)
    }


This is view model of BankTransferViewController

import RxCocoa
import RxSwift

class BankTransferViewModel: BaseViewModel {
    private let transferUseCase: TransferUseCase
    
    var accountInfo: BehaviorRelay<AccountExistModel?> = BehaviorRelay(value: nil)
    var balance: BehaviorRelay<BalanceModel?> = BehaviorRelay(value: nil)
    var bankNumberText: BehaviorRelay<String> = BehaviorRelay(value: "")
    var firstName: BehaviorRelay<String> = BehaviorRelay(value: "")
    var lastName: BehaviorRelay<String> = BehaviorRelay(value: "")
    var amountText: BehaviorRelay<String> = BehaviorRelay(value: "")
    var descriptionText: BehaviorRelay<String> = BehaviorRelay(value: "")
    var transferRequest: BehaviorRelay<BankTransactionRequest?> = BehaviorRelay(value: nil)

    var accountExist = PublishSubject<Bool>()
    var hasMoney = PublishSubject<Bool>()
    var invalidBankNumber = PublishSubject<Bool>()
    var accountCannotRecieve = PublishSubject<Bool>()
    var isTransfer : Bool = true
    
    var transferPressed: AnyObserver<Void> {
        return AnyObserver { [weak self] event in
            switch event {
            case .next:
                guard let strongSelf = self else {
                    return
                }
                strongSelf.checkValidation()
            default:
                break
            }
        }
    }
    
    init(transferUseCase: TransferUseCase) {
        self.transferUseCase = transferUseCase
    }
    
    func transferNational() {
        self.checkValidation()
    }
    
    private func checkValidation() {
        guard let balance = self.balance.value else {
            state.onNext(.error(error: RepoError(with: "Dështoi verifikimi i disponueshmërisë financiare. Ju lusim të provoni më vonë.")))
            return
        }
        
        
        if bankNumberText.value == ""{
            state.onNext(.error(error: RepoError(with: "Plotëso fushën për numrin e bankës të pranuesit.")))
            return
        }
        
        if bankNumberText.value.count < 6{
            state.onNext(.error(error: RepoError(with:"Ju lutemi, shtypni një numër valid të gjirollogarisë")))
            return
        }
        
        guard let doubleAmount = Double(amountText.value), doubleAmount > 0 else {
            state.onNext(.error(error: RepoError(with: "Shuma jo e rregullt")))
            return
        }
        
        if amountText.value == ""{
            state.onNext(.error(error: RepoError(with: "Shuma jo e 
    saktë.")))
            return
        }
        
        
        if balance.Balance < doubleAmount{
            state.onNext(.error(error: RepoError(with: "Nuk keni fonde të mjaftueshme për realizimin e transaksionit.")))
            return
        }
    
        
        if bankNumberText.value != "" && amountText.value != "" && (balance.Balance >= doubleAmount) {
            
//            checkAccountExist()
        }
    }
    
    
        func checkModulus16(accountNumber: String) -> Bool {
        if accountNumber.isEmpty{
            return false
        }
        
        let newValue = accountNumber.dropLast(2)
        let mod = Int64(newValue + "00")! % 97
        let result = 98 - mod
        let derivedData = newValue + "" + (result < 10 ? "0\(result)" : "\(result)")
        
        return Int64(derivedData) == Int64(accountNumber)
    }
    
    
        func showError(with message: String ) {
          state.onNext(.error(error: RepoError(with: message)))
    }
    
    
        func getBalance(){
        let params = ["Identification": UserManager.shared.identification ?? "" ] as ApiJson
        transferUseCase.getBalance(with: params) {[weak self] (balance, error) in
            guard let strongSelf = self else { return }
            if let error = error {
                strongSelf.state.onNext(.error(error: error))
                strongSelf.accountExist.onNext(false)
            }else if let balance = balance{
                UserManager.shared.userBonus = balance.BonusAmount
                strongSelf.state.onNext(.content)
                strongSelf.balance.accept(balance)
                strongSelf.accountExist.onNext(true)
                UserManager.shared.updateBalance(with: balance)
            }
        }
    }
    
    //MARK: - baseViewModel
    
        override func tryAgain() {
        self.getBalance()
        
    }

}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source