2015-07-01 2 views
1

В настоящее время я пытаюсь определить метод, который принимает аргумент Class, то есть подкласс определенного типа. Моя текущая реализация является:Как указать тип типа класса

- (void)methodThatNeedsAClassOfSpecialTypeAsInput:(Class)inClass {} 

Принимая NSString как пример базового класса, я попытался NSString.Class и [NSString class] указать класс аргументов, но

- (void)methodThatNeedsAClassOfSpecialTypeAsInput:([NSString class])inClass { } 

не компилировать с Parse issue: Expected a type.

Вопрос в следующем: можно ли сделать аргумент аргументов Class явно?

Или другими словами: Я хочу, чтобы мои методы подписали семантический, чтобы сказать: я могу взять NSString class, а только NSString class в качестве аргумента.

EDIT:

Ответ: Нет

ответ

3

Вы чуть было его:

[NSString class] 

EDIT (после того, как вопрос обновляется):

Это как метод определен и объявлен:

- (void)methodThatNeedsAClassOfSpecialTypeAsInput:(Class)inClass { } 

Но это называется так:

[someObject methodThatNeedsAClassOfSpecialTypeAsInput:[NSString class]]; 
+0

Я уже пробовал это. Тот же результат. – shallowThought

+0

@ShallowThought Ну, все, что я могу сказать, так оно и есть. Ошибка должна быть чем-то другим. Если вы обновите свой вопрос с полным сообщением об ошибке компилятора (используя код в моем ответе), мы сможем добиться определенного прогресса. – Droppy

+0

Спасибо, что вернулись ко мне. Ответ обновлен. – shallowThought

0

Вы получили это неправильно. Метод декларации прав

- (void)methodThatNeedsAClassOfSpecialTypeAsInput:(Class)inClass; 

Чем, на месте вы называете это

[obj methodThatNeedsAClassOfSpecialTypeAsInput:[NSString class]]; 

, если в реализации вы должны быть гарантии, что ваш inClass является NSString, вы можете использовать

if([inClass isSubclassOfClass:[NSString class]]) { 
    //Do whatever you need 
} 
Смежные вопросы