Почему автозаполнение не работает во вновь создаваемом файле заголовка протокола в xcode?
Я просто создаю файл заголовка протокола, выполнив:
Файл → Новый → Файл → (Cocoa Touch) Objective-C Протокол → Далее → имя входного протокола → Далее → выберите мою цель → Создать
когда я пытаюсь создать список методов в файле заголовка протокола. Я заметил, что Dynamic Typing не работает. Когда я набираю "NSStr" в других файлах, обычно автоматически открывается список классов, и все классы помечены цветами. почему он не работает в файле заголовка протокола?
BTW, я попытался поместить код протокола в существующий файл класса, который работает. почему он не работает в разделенном файле?
Некоторые ключевые слова будут работать, например, "void". появится всплывающее окно. но другие ключевые слова, такие как "NSString", не будут распознаваться.
Мой протокол выглядит так:
#import <Foundation/Foundation.h>
@protocol PanToSwitchViewDelegateProtocol <NSObject>
@end
Ответы
Ответ 1
Я просто экспериментировал, и я вижу точно то же самое. Я думаю, проблема заключается в том, что компилятор не будет сканировать файл, если он не импортируется в сканируемый файл.
Если вы импортируете заголовок протокола в файл .m
и скомпилируете его для удачи, вы должны начать загрузку автозаполнения на NSString.
ИЗМЕНИТЬ
Из комментариев по моему ответу и в других местах видно, что jazou2012 находится под недоразумением.
Автозаполнение не имеет права говорить о правильности модуля или нет. Автозаполнение может не найти идентификатор по нескольким причинам, даже если этот идентификатор был правильно определен. Например, я смог реплицировать проблему Jazou с помощью NSString в протоколе, хотя был импортирован Foundation.h
.
Однако, как только я импортировал заголовок протокола в файл .m
, автозаполнение начало распознавать NSString
. Я предполагаю, что автозаполнение запускает только индексирование файлов, если они видны компилятору.
Если вы хотите поймать ошибки компиляции, вам необходимо скомпилировать код. Если компилятор говорит "нет ошибок или предупреждений", ваш код в порядке, независимо от того, что говорит автозаполнение.
Ответ 2
Импорт в заголовок класса или файл реализации или в другое место, где он будет виден, например, другой заголовок импорта или предварительно скомпилированный заголовок.
Протоколы в Foundation видны всегда, потому что они импортируются с помощью Foundation.
Cocoa включает Foundation, поэтому классы просмотра будут включать протоколы Cocoa.
Core Animation и WebKit по умолчанию не включены, поэтому вам нужно импортировать их, чтобы увидеть любые протоколы, которые они включают.