2014-06-09 86 views
23

我想声明一个指定初始化是这样的:NS_DESIGNATED_INITIALIZER预期:(冒号)

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

但它显示我这个编译错误:

Expected ':' 

有趣的是,当我试图把它写像这样(参考链接:Adopting Modern Objective-C) -

- (instancetype)init NS_DESIGNATED_INITIALIZER; 

它显示此错误:

Expected ';' after method prototype. 

关于如何正确使用NS_DESIGNATED_INITIALIZER的任何想法?

+0

? –

回答

33

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,或者你可以明确地添加宏您的预编译的头。

1

请记住,你只能添加到这个接口或类扩展声明,否则你会得到这样的错误:如果你`cmd` +点击`NS_DESIGNATED_INITIALIZER`,是什么让你

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