当前位置:  开发笔记 > 编程语言 > 正文

传递一个类作为参数?

如何解决《传递一个类作为参数?》经验,为你挑选了2个好方法。

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

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

这张照片出了什么问题?



1> Peter Hosey..:
- (id)navControllerFromView:(Class *)viewControllerClass

它只是Class,没有星号.(Class不是类名;你没有传递指向Class类实例的指针,你自己传递一个类.)

rootNavController = [ self navControllerFromView:RootViewController

你不能像这样传递一个裸名字 - 你必须给它发一条消息.如果您确实想要在某处传递该类,则需要向其发送class消息.从而:

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


正确.你需要一个类的名称.记住,编译时间和运行时间是分开的; viewControllerClass变量中的对象直到运行时才知道,因此您无法在编译时使用它来静态声明对象变量.你必须使用"id viewController".

2> Ben Gotow..:

看起来你差不多了.你想通过[RootViewController class]而不是RootViewController.这给了你一个Class价值.另外,我不认为你想要你的功能Class *,只需要一个Class.它实际上不是Objective-C对象.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有