2014-06-09 113 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