传递一个类作为参数?
我一直相信可以通过一个类作为方法参数,但是我在实现这个概念时遇到了麻烦。 现在我有这样的东西:
- (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)