我一直认为可以将类作为方法参数传递,但是我在实现这个概念时遇到了麻烦。现在我有类似的东西:
- (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"
];
这张照片出了什么问题?
答案 0 :(得分:46)
- (id)navControllerFromView:(Class *)viewControllerClass
它只是Class
,没有星号。 (Class
不是类名;您没有传递指向Class
类实例的指针,而是您自己传递一个类。)
rootNavController = [ self navControllerFromView:RootViewController
你不能像这样传递一个裸名字 - 你必须给它发一条消息。如果您确实想要在某处传递该类,则需要向其发送class
消息。因此:
rootNavController = [ self navControllerFromView:[RootViewController class]
title:@"Contact"
imageName:@"my_info.png"
];
答案 1 :(得分:12)
看起来你差不多了。您想要传递[RootViewController class]
而不是RootViewController
。这会为您提供Class
值。另外,我认为您不希望自己的功能只使用Class *
Class
。它实际上不是Objective-C对象。
答案 2 :(得分:1)
您没有解释您发布的代码有任何问题。什么不起作用?你期待发生什么?到目前为止,我唯一能想到的是你可能想要传递[RootViewController class]
而不是RootViewController
。此外,您的格式化正在扼杀我。
答案 3 :(得分:0)
在斯威夫特:
func acceptingFunction(aClass: AnyClass) {
...
}
致电:
acceptingFunction(UIView)