2015-07-16 2 views
0

Я файл constants.h и объявил:Найти NSString в сопзЬ NSString * сопзЬ []

extern NSString * check_array_editable[]; 

В constants.mi комплекте:

NSString * check_array_editable[] = { @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"9", @"11", @"14" , @"17", @"18", @"21" }; 

Так не должны называем initializer, что я должен делать, если я использую NSArray вместо коллекции.

Теперь я импортирую константы.h и могу получить доступ к check_array_editable []. Но как я буду иметь возможность получить длину и индекс определенного элемента как использования NSArray:

BOOL isTheObjectThere = [check_array_editable containsObject: @"my string"]; 
NSUInteger indexOfTheObject = [check_array_editable indexOfObject: @"my string"]; 

--- редактировать я наконец decidest работать с NSArray и использовать inizalise пустоту в constants.h

NSArray * check_array_invisible; 
NSArray * check_array_editable; 
NSArray * check_array_texteingabe; 
NSArray * check_array_assistent; 
NSArray * check_array_functionfield; 
+(void)initialize{ 
    check_array_invisible = @[@10, @13, @34, @35]; 
    check_array_editable = @[@1,@2, @3, @4, @5, @6, @7, @9, @11, @14 , @17, @18, @21 ]; 
    check_array_texteingabe = @[@1, @2, @3, @9, @11, @14]; 
    check_array_assistent = @[@16, @35]; 
    check_array_functionfield = @[@32]; 
} 
+0

NSArray инициализатор с помощью Objective-C литералов это до тех пор, как C-массива 'NSArray * check_array_editable = @ [@ "1", @ "2", @ "3" ...];' и у вас есть все удобства класса NSArray – vadian

ответ

1

с вашей декларации ваш массив C массив типа, так что вы не сможете использовать знакомые методы как containsObject и indexOfObject, но вы должны иметь дело с ним как массив типа C и поиска, как это

NSString *s = @"1"; 
int i = 0; 
while(check_array_editable[i]) { 
    if([check_array_editable[i] isEqualToString:s]) { 
     NSLog(@"yeah"); 
     break; 
    } 
    i++; 
} 

Вместо этого, вы можете в файле реализации объявить массив как это:

#define [email protected][@"1", @"2", @"3", @"4"] 

и теперь вы можете использовать методы весело, как indexOfObject

пример:

NSLog(@"%zd",[arrayOfStrings indexOfObject:@"2"]); 

результат:

2015-07-16 11:04:47.620 PROJ[881:13857] 1 

Более подробная информация here, here и here

+0

, но я decidet для работы с NSArray и инициализатором – 2red13

1

Вы можете использовать sizeof, чтобы определить количество элементов в массиве C. Беря sizeof массив C:

sizeof(check_array_editable) 

возвращает общий размер всех его элементов (в вашем примере ответ является 104 [при условии 64-разрядного двоичного а]); и в вашем случае каждый элемент является NSString * размер которой определяется по формуле:

sizeof(NSSString *) 

который будет возвращать 8 [снова предполагая, 64-бит]. Просто разделите общую длину по длине элемента:

sizeof(check_array_editable)/sizeof(NSSString *) 

и вы получите количество элементов в массиве (в вашем примере 13).

Важно: Вышеуказанный будет только работа для переменных, объявленных как массивы. Переменная, объявленная с типом указателя C, которая затем устанавливается для ссылки на динамически распределенную память, может использоваться в качестве массива, но она не одна. Принимая sizeof, такая переменная возвращает свой размер - размер указателя - не размер того, что он в настоящее время ссылается.

НТН

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