         case let .success(cvc):
             cvcTextField.text = cvc
             cvcErrorLabel.text = nil
+            focusNextInputField(currentField: cvcTextField)
         case let .failure(error):
             switch error {
             case let .cvcEmptyError(value, instant),

        case let .success(expiration):
            expirationTextField.text = expiration
            expirationErrorLabel.text = nil
        case let .failure(error):
            switch error {
            case let .expirationEmptyError(value, instant),

        }
        cardHolderErrorLabel.isHidden = cardHolderTextField.text == nil
    }

    /// バリデーションOKの場合、次のTextFieldへフォーカスを移動する
    ///
    /// - Parameter currentField: 現在のTextField
    private func focusNextInputField(currentField: UITextField) {

        switch currentField {
        case cardNumberTextField:
            if cardNumberTextField.isFirstResponder {
                expirationTextField.becomeFirstResponder()
            }
        case expirationTextField:
            if expirationTextField.isFirstResponder {
                cvcTextField.becomeFirstResponder()
            }
        case cvcTextField:
            if cvcTextField.isFirstResponder && isHolderRequired {
                cardHolderTextField.becomeFirstResponder()
            }
        default:
            break
        }
    }
}
