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