Когда вы вызываете self.type1ViewController.parentViewController
вместо viewController.parentViewController
, это дает вам ошибку, потому что вы объявили self.type1ViewController
как некоторый суперкласс, а не type1ViewController. Когда компилятор смотрит на это объявление, он не найдет свойство parentViewController, поэтому выдает ошибку.
В первом примере ваш viewController по-прежнему объявлен как type1ViewController, поэтому он работает нормально. Во втором примере он все равно будет работать, если вы приведете его к type1ViewController, но, конечно, лучше просто изменить объявление.