Передавать класс как параметр?
Мне повезло, что можно передать класс как параметр метода, но у меня возникли проблемы с реализацией концепции. Прямо сейчас у меня есть что-то вроде:
- (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
- (id)navControllerFromView:(Class *)viewControllerClass
Это просто Class
, без звездочки. (Class
не является именем класса, вы не передаете указатель на экземпляр класса Class
, вы передаете сам класс.)
rootNavController = [ self navControllerFromView:RootViewController
Вы не можете передавать имя голого класса примерно так: вам нужно отправить ему сообщение. Если вы действительно хотите передать класс где-то, вам нужно отправить сообщение Class
. Таким образом:
rootNavController = [ self navControllerFromView:[RootViewController class]
title:@"Contact"
imageName:@"my_info.png"
];
Ответ 2
Похоже, вы почти получили его. Вы хотите передать [RootViewController class]
вместо RootViewController
. Это дает вам значение Class
. Кроме того, я не думаю, что вы хотите, чтобы ваша функция взяла Class *
, просто Class
. Это не объект Objective-C.
Ответ 3
Вы не объяснили никаких проблем с кодом, который вы опубликовали. Что не работает? Что вы ожидаете? Единственное, о чем я могу думать, это то, что вы можете передать [RootViewController class]
вместо RootViewController
. Кроме того, ваше форматирование убивает меня.
Ответ 4
В Swift:
func acceptingFunction(aClass: AnyClass) {
...
}
вызов с помощью:
acceptingFunction(UIView)