J'ai été amené à croire qu'il est possible de passer une classe en tant que paramètre de méthode, mais j'ai du mal à mettre en œuvre le concept. En ce moment j'ai quelque chose comme:
- (id)navControllerFromView:(Class *)viewControllerClass
title:(NSString *)title
imageName:(NSString *)imageName
{
viewControllerClass *viewController = [[viewControllerClass alloc] init];
UINavigationController *thisNavController =
[[UINavigationController alloc] initWithRootViewController: viewController];
thisNavController.tabBarItem = [[UITabBarItem alloc]
initWithTitle: title
image: [UIImage imageNamed: imageName]
tag: 3];
return thisNavController;
}
et je l'appelle comme ça:
rootNavController = [ self navControllerFromView:RootViewController
title:@"Contact"
imageName:@"my_info.png"
];
Quel est le problème avec cette image?
- (id)navControllerFromView:(Class *)viewControllerClass
C'est juste Class
, sans l'astérisque. (Class
n'est pas un nom de classe; vous ne passez pas un pointeur sur une instance de la classe Class
, vous transmettez une classe elle-même.)
rootNavController = [ self navControllerFromView:RootViewController
Vous ne pouvez pas transmettre un nom de classe nu comme ceci: vous devez lui envoyer un message. Si vous voulez réellement passer le cours quelque part, vous devez lui envoyer le message class
. Ainsi:
rootNavController = [ self navControllerFromView:[RootViewController class]
title:@"Contact"
imageName:@"my_info.png"
];
On dirait que tu l'as presque. Vous voulez passer [RootViewController class]
au lieu de RootViewController
. Cela vous donne une valeur Class
. De plus, je ne pense pas que vous souhaitiez que votre fonction prenne un Class *
, mais simplement une Class
Ce n'est pas réellement un objet Objective-C.
Vous n'avez expliqué aucun problème avec le code que vous avez posté. Qu'est-ce qui ne marche pas? Qu'espérez-vous qu'il se passe? La seule chose à laquelle je peux penser jusqu’à présent est que vous souhaitiez peut-être passer [RootViewController class]
au lieu de RootViewController
. En outre, votre mise en forme me tue.
En rapide:
func acceptingFunction(aClass: AnyClass) {
...
}
appeler avec:
acceptingFunction(UIView)