Je disais dans obj-c
[self.tabBarController.viewControllers objectAtIndex:1];
mais maintenant dans swift no ObjectAtIndex plus
self.tabBarController.viewControllers.ObjectAtIndex
Mettre à jour
ok je vais le rendre simple permet de considérer que j'ai tabBarController il contient 2 object [FirstViewController, SecondViewController] et j'essaie de faire un délégué entre l'object ici est le code pour définir le délégué
var Svc:SecondViewController = self.tabBarController.viewControllers[1] as SecondViewController! Svc.delegate = self
quand je cours, j'ai eu cette erreur 0x1064de80d: movq% r14,% rax et aucune erreur de console apparaît
Votre code est OK:
var svc:SecondViewController = self.tabBarController.viewControllers[1] as SecondViewController! svc.delegate = self
… cependant vous pouvez omettre !
marque à la fin et :SecondViewController
définition de type :SecondViewController
car elle peut être inférée par le cast:
var svc = self.tabBarController.viewControllers[1] as SecondViewController
Le problème apparaît parce que vous essayez de lancer à la mauvaise class. Essayez d'imprimer pour déboguer le nom du journal de la class d'object à [1]
; ajoutez ceci avant votre dissortingbution pour vérifier le nom de la class:
let vcTypeName = NSSsortingngFromClass(self.tabBarController.viewControllers[1].classForCoder) println("\(vcTypeName)")
METTRE À JOUR:
Comme nous l'avons compris dans les commentaires, vous devez UINavigationController
controller de vue reçu en UINavigationController
:
var nc = self.tabBarController.viewControllers[1] as UINavigationController
Plus tard, vous pourrez examiner la propriété nc.viewControllers
et voir si, par exemple, son topViewController
est SecondViewController
:
if nc.topViewController is SecondViewController { var svc = nc.topViewController as SecondViewController // your code goes here }
Vous n'avez pas besoin de objectAtIndex
dans swift, utilisez simplement l'opérateur subscript
:
self.tabBarController.viewControllers[1]