Заменить
pageController?.setViewControllers(viewControllers as? [UIViewController], direction: .forward, animated: false)
на
pageController?.setViewControllers(viewControllers, direction: .forward, animated: false)
На
let startingViewController = viewControllerAtIndex(index: currentIndex)!
pageController?.setViewControllers([startingViewController], direction: .forward, animated: false)
В обратном направлении
guard currentIndex - 1 >= 0 else { return }
currentIndex -= 1
// get the vc
Вследующее нажатие
guard currentIndex + 1 < pg.count else { return }
currentIndex += 1
// get the vc
В вашем текущем коде кажется, что этот let startingViewController: TableVC?
возвращает ноль в некоторой точке, что делает этот viewControllers as? [UIViewController]
пустым массивом