2

Почти каждый пример weakSelf шаблона я сталкиваюсь онлайн имеет синтаксисIOS Objective-C: weakSelf Синтаксис

__weak typeof(self) weakSelf = self; 

Но компилятор жалуется на этот синтаксис в последней версии Xcode, требуя:

__weak __typeof__(self) weakSelf = self; 

Был ли синтаксис изменен, или мне не хватает импорта? Я попытался потянуть <objc/runtime.h>, но никаких изменений.

Забавный вопрос о бонусе: почему бы просто не бросить его явно?

__weak MyBoffoClass *weakSelf = self; 

Я нашел здесь один ответ, который сказал, что лучше всего использовать его напрямую, но не рассуждать о том, почему.

+1

Разумный ответ здесь: http://stackoverflow.com/questions/14877415/difference-between-typeof-typeof-and-typeof-objective-c – danh

+0

Спасибо, я искал typeof, но не получил этого результата, очевидно, должен был вырыться глубже, спасибо. –

ответ

0

После того, как помощь @danh указала мне на Difference between typeof, __typeof and __typeof__ (Objective-c), я обнаружил, что проблема была в настройках компилятора.

Нажмите на проект в верхней части окна Project Navigator, нажмите на Build Settings и выбрать View All: Choosing Settings

Следующая прокрутка вниз к компании Apple LLVM н. п - Язык и изучить параметры: Language Settings

В моем случае языка диалект был установлен C99, который не поддерживает макросы компилятора GNU и другие расширения языка C.

Не уверен, почему он настроен так для проекта (архитектор проекта не помнит, почему), я просто должен учитывать этот факт при чтении фрагментов кода StackOverflow. Лучше вводить что-то, меняя его, потому что я ленивый машинист.

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