I have a UIPageViewController with 4 View Controllers in it. In the second VC, the user enters some data. In the last VC, there is a button that the user clicks to insert these data into DB. I want to pass the data from the second VC to the fourth one. All my search results show segues, but the VCs are not directly connected.
So I thought of using delegates, but it is not working for me.
Code:
UIPageViewController:
import UIKit
class PageViewController: UIPageViewController {
var pageControl = UIPageControl()
fileprivate lazy var pages: [UIViewController] = {
    return [
        self.getViewController(withIdentifier: "locationStoryBoard"),
        self.getViewController(withIdentifier: "notificationStoryboard"),
        self.getViewController(withIdentifier: "weightStoryboard"),
        self.getViewController(withIdentifier: "bloodTypeStoryboard"),
        self.getViewController(withIdentifier: "ageStoryboard"),
        self.getViewController(withIdentifier: "genderStoryboard"),
        self.getViewController(withIdentifier: "mobileNumberStoryboard"),
        self.getViewController(withIdentifier: "preventionStoryboard")
    ]
}()
fileprivate func getViewController(withIdentifier identifier: String) -> UIViewController
{
    return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: identifier)
}
override func viewDidLoad()
{
    super.viewDidLoad()
    self.dataSource = self
    self.delegate   = self
    
    if let firstVC = pages.first
    {
        setViewControllers([firstVC], direction: .forward, animated: true, completion: nil)
    }
    configurePageControl()
}
//Page Control (3 dots)
func configurePageControl() {
    pageControl = UIPageControl(frame: CGRect(x: 0,y: UIScreen.main.bounds.maxY - 50,width: UIScreen.main.bounds.width,height: 50))
    self.pageControl.numberOfPages = pages.count
    self.pageControl.currentPage = 0
    self.pageControl.alpha = 0.5
    self.pageControl.tintColor = UIColor.black
    self.pageControl.pageIndicatorTintColor = UIColor.white
    self.pageControl.currentPageIndicatorTintColor = #colorLiteral(red: 0.986409843, green: 0.4042935669, blue: 0.4366002679, alpha: 1)
    self.view.addSubview(pageControl)
}
}
//MARK: - UIPageViewControllerDataSource methods
extension PageViewController: UIPageViewControllerDataSource
{
    func pageViewController(_ pageViewController: UIPageViewController,
                            viewControllerBefore viewController: UIViewController) -> UIViewController? {
        let currentIndex = pages.firstIndex(of: viewController)!
        let previousIndex = currentIndex - 1
        return (previousIndex == -1) ? nil : pages[previousIndex]
    }
    
    func pageViewController(_ pageViewController: UIPageViewController,
                            viewControllerAfter viewController: UIViewController) -> UIViewController? {
        let currentIndex = pages.firstIndex(of: viewController)!
        let nextIndex = currentIndex + 1
        return (nextIndex == pages.count) ? nil : pages[nextIndex]
    }
}
    //MARK: - UIPageViewControllerDelegate methods
    extension PageViewController: UIPageViewControllerDelegate {
        func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
            let pageContentViewController = pageViewController.viewControllers![0]
            self.pageControl.currentPage = pages.firstIndex(of: pageContentViewController)!
        }
    }
First VC
     protocol NameAndMobileDelegates {
             func passName(nameToBePassed: String)
        }
        
    class MobileNumberViewController: UIViewController, UITextFieldDelegate {
        
        var delegate: NameAndMobileDelegates?
    ...
func textFieldDidEndEditing(_ textField: UITextField) {
            switch textField.tag {
            case 1:
                name = textField.text!
                self.delegate?.passName(nameToBePassed: name)
                print(name)
            case 2:
                mobileNumber = textField.text!
                print(mobileNumber)
            default: break
            }
    }
In the 4th VC:
// MARK: - Name and Number Delegate Methods
extension DiseasesViewController: NameAndMobileDelegates {
    func passName(nameToBePassed: String) {
        print("protocol worked")
    }
Thank you in advance
 
    