2009-06-23 119 views
37

我一直认为可以传递一个类作为方法参数,但是我在实现这个概念时遇到了问题。现在,我有这样的:传递一个类作为参数?

- (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" 
]; 

有什么不对的图片?

回答

44
- (id)navControllerFromView:(Class *)viewControllerClass 

这只是Class,没有星号。 (Class不是一个类名,你不是一个指针传递到Class类的实例,你传递一个类本身。)

rootNavController = [ self navControllerFromView:RootViewController 

你不能传递类似这样的裸类名 - 你必须发送一条消息。如果你真的想在某个地方通过课程,你需要发送class消息。因此:

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

我看现在 - 你所说的一切是有道理的 - 和它的作品,如果我使用“标识的viewController = [[viewControllerClass的alloc]初始化] ;” - 但我得到一个“viewController undeclaired”错误,如果我尝试“viewControllerClass * viewController = [[viewControllerClass alloc] init];”任何想法为什么?或者我可以不使用类参数吗? – JoBu1324 2009-06-23 05:02:16

1

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

12

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

0

在斯威夫特:

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

通话用:

acceptingFunction(UIView)