传递一个类作为参数?

时间:2009-06-23 04:20:48

标签: objective-c iphone cocoa

我一直认为可以将类作为方法参数传递,但是我在实现这个概念时遇到了麻烦。现在我有类似的东西:

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

这张照片出了什么问题?

4 个答案:

答案 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)