Подтвердить что ты не робот

Ожидается NS_DESIGNATED_INITIALIZER: (двоеточие)

Я пытаюсь объявить назначенный инициализатор следующим образом:

- (instancetype)initWithDelegate:(id <MyDelegate>)delegate NS_DESIGNATED_INITIALIZER;

Но он показывает мне эту ошибку компиляции:

Expected ':'

Интересно, когда я пытаюсь написать его вот так (ссылка: Принятие современного Objective-C) -

- (instancetype)init NS_DESIGNATED_INITIALIZER;

Он показывает эту ошибку:

Expected ';' after method prototype.

Любые идеи о том, как правильно использовать NS_DESIGNATED_INITIALIZER?

4b9b3361

Ответ 1

NS_DESIGNATED_INITIALIZER макрос не определен в заголовках библиотеки для Xcode 5 - вам нужен Xcode 6 для его использования. Обратите внимание, что ваша ссылка говорит "Предварительная версия".

Макрос определяется следующим образом (цитирование NSObjCRuntime.h)

#ifndef NS_DESIGNATED_INITIALIZER
#if __has_attribute(objc_designated_initializer)
#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
#else
#define NS_DESIGNATED_INITIALIZER
#endif
#endif

Заметьте, что вы все равно можете использовать

- (instancetype)initWithDelegate:(id <MyDelegate>)delegate __attribute__((objc_designated_initializer));

в Xcode 5 или вы можете добавить этот макрос явно в свой предварительно скомпилированный заголовок.

Ответ 2

Помните, что вы можете добавлять это только к объявлениям расширений интерфейса или класса, иначе вы получите эту ошибку:

'objc_designated_initializer' attribute only applies to init methods of interface or class extension declarations