传递一个类作为参数?

我一直相信可以通过一个类作为方法参数,但是我在实现这个概念时遇到了麻烦。 现在我有这样的东西:

- (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; } 

我这样称呼它:

 rootNavController = [ self navControllerFromView:RootViewController title:@"Contact" imageName:@"my_info.png" ]; 

这张照片有什么问题?

 - (id)navControllerFromView:(Class *)viewControllerClass 

这只是Class ,没有星号。 ( Class不是一个类名;你没有传递一个指向Class类的实例的指针,你自己传递一个类。)

 rootNavController = [ self navControllerFromView:RootViewController 

你不能像这样传递一个纯粹的类名 – 你必须发送一条消息。 如果你真的想在某个地方传授课程,你需要发送class信息。 从而:

 rootNavController = [ self navControllerFromView:[RootViewController class] title:@"Contact" imageName:@"my_info.png" ]; 

看起来你已经差不多了。 你想传递[RootViewController class]而不是RootViewController 。 这给你一个Class价值。 此外,我不认为你想要你的function采取Class * ,只是一个Class 。 这实际上不是一个Objective-C对象。

你没有解释你发布的代码有任何问题。 什么不行? 你期望发生什么? 到目前为止我唯一能想到的就是你可能想要传递[RootViewController class]而不是RootViewController 。 此外,你的格式正在杀死我。

在Swift中:

 func acceptingFunction(aClass: AnyClass) { ... } 

打电话给:

 acceptingFunction(UIView)