Each view is loaded into memory only once when you open your app from non running state. In the second view controller move it from viewDidLoad to viewDidAppear. I believe it will solve your problem. Let me know if it didn't and I'll try to debug it.
EDIT:
Here is a working example I made.
First time:
FirstViewController -> SecondViewController -> ThirdViewController
Second time:
FirstViewController -> ThirdViewController (without seeing the SecondViewController!)

FirstViewController.swift:
import UIKit
class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func ToSecondPressed(sender: AnyObject) {
if let skip = NSUserDefaults.standardUserDefaults().valueForKey("SkipSecond") as? Bool{
let Third: ThirdViewController = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("Third") as! ThirdViewController
UIApplication.sharedApplication().delegate?.window??.rootViewController = Third
}
else{
let Second: SecondViewController = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("Second") as! SecondViewController
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "SkipSecond")
UIApplication.sharedApplication().delegate?.window??.rootViewController = Second
}
}
}
SecondViewController.swift:
import UIKit
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func ToThirdPressed(sender: AnyObject) {
let Third = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("Third") as? ThirdViewController
UIApplication.sharedApplication().delegate?.window??.rootViewController = Third
}
}
ThirdViewController.swift:
import UIKit
class ThirdViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}