我一直认为可以将类作为方法参数传递,但是我在实现这个概念时遇到了麻烦.现在我有类似的东西:
- (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
价值.另外,我不认为你想要你的功能Class *
,只需要一个Class
.它实际上不是Objective-C对象.