2015-08-18 2 views
0

Мой проект iOS содержит как код цели-кода, так и быстрый код.вызов метода класса объектива-c в swift

Скажем, у меня есть класс с именем Task, он содержит метод классаdo:

@interface Task: NSObject 
+ (void) doSomething:(NSString *) value; 
@end 

Вышеуказанное заявление @interface находится в Task.h файл. Другие классы-c-классы могут вызвать метод без каких-либо проблем.

Мой быстры код хотите вызвать метод doSomething,

Task.doSomething(“do task now!”) 

Но выше строка кода получить следующее сообщение об ошибке компилятора:

‘Task.Type’ does not have a member named ‘doSomething’.

Почему? Каков правильный способ вызова метода класса object-c в быстром коде?

(Там нет проблем с сгенерированными мостиковыми интерфейсами между Objective-C и быстрым.)

+0

Это может быть только тип введенного кода, но для объявления метода требуется точка с запятой в интерфейсе obj-c. – keithbhunter

+0

Я просто забыл добавить точку с запятой, у меня точка с запятой в моем объектно-c-коде. – user842225

+0

Можете ли вы уточнить, в каком файле указано объявление @interface, которое вы указали? Он должен быть в файле .h, чтобы быть видимым. Являются ли другие классы объектно-с способными вызвать метод? –

ответ

0

Я думаю, что проблема в том, что «делать» является зарезервированным ключевым словом. Я попробовал это и получил немного другую ошибку (о том, что отсутствует скобка для цикла while), но изменение метода на «doSomething» устранило проблему.

Я смог воспроизвести ошибку, которую вы видели, переместив объявление @interface в Task.m, а не Task.h. Пожалуйста, подтвердите, где у вас этот код, поскольку он будет доступен только для других классов, если он находится в файле .h.

+1

Если это проблема, его можно решить, процитировав ее с помощью рюкзаков: '' ' Task.'do' («do task now!») '' ' – newacct

+0

Спасибо, но' do' - это всего лишь мой примерный метод в моем вопросе, в моем реальном коде имя, безусловно, не зарезервированное ключевое слово. Я обновил свой вопрос с помощью 'doSomething', чтобы избежать такого рода вводящего в заблуждение. Кроме того, моя декларация интерфейса находится в Task.h. – user842225

+0

Можете ли вы добавить копию своего заголовка мостов на свой вопрос? –

Смежные вопросы