2017-06-18 22 views
0

我將我的類的一些默認初始值設置項存儲爲靜態類變量。像這樣:Objective C - NSArray類型的靜態類變量

// List.h 
static NSString *DEFAULT_LIST_NAME = @"Not Set"; 
static BOOL DEFAULT_RECURSION = NO; 

我還需要一個類型爲NSArray *的靜態變量設置爲空數組。這怎麼能實現?目前我得到的錯誤:

Initializer element is not a compile-time constant

+0

嗨 解決這個問題類似於你的。有不同的方法來做到這一點。 也許你想檢查它:https://stackoverflow.com/questions/20544616/static-nsarray-of-strings-how-where-to-initialize-in-a-view-controller – wei

+0

@SamB爲什麼我想要這樣做? – user7802048

+0

顯示你的錯誤的截圖。如果我使用上面的靜態代碼行,我不會在我的Xcode 8中收到任何編譯警告或錯誤 –

回答

0

定義一個類方法是:

.m文件

@implementation test 
static NSArray *array; 
+ (NSArray *)array { 
    if (!array) array = [[NSArray alloc] init]; 
    return array; 
} 
@end 
1

你所得到的編譯時錯誤"Initializer element is not a compile-time constant"因爲靜態變量的值實際寫入在編譯時插入到您的可執行文件中。所以你只能使用常量值(不是在運行時執行的alloc/init)。您可以使用任何以下選項

  1. 你可以寫static NSArray *arr = nil,並使用+initialize來創建陣列。

  2. 另一種選擇是,你可以使用__attribute__ ((constructor))

  3. 另一個選擇是從.M切換從Objective-C的目標來-C++源文件的類型(或重命名爲.mm,其中有同樣的效果)。在C++中,這樣的初始化不需要是編譯時間常數的值,原來的代碼會工作得很好

  4. 您也可以使用給定的Pat_Morita