2015-05-21 5 views
2

Я довольно новичок в программировании, и я немного догнал, что делать. Теперь каждый из объектов в моем NSArray имеет свои свойства, содержащие данные, в которых я нуждаюсь. Я привык к итерации через массив для доступа к его объектам, но никогда не приходилось проходить через один и получать доступ к свойствам некоторых его объектов. Поэтому я полностью потерян.Доступ к свойствам объектов в массиве

Обычно, когда мне нужно перебирать массив, это простой процесс, что-то вроде:

For (int i =0; i <= self.array.count; i++) { 
NSLog(@"%d", i): 
} 

достаточно легко. Но теперь я столкнулся с проблемой взглянуть на все гнезда, хранящиеся в индексе массивов, и получить доступ к информации из этого объекта. Мне нужно сделать это и цикл for, поскольку есть несколько объектов. Я верю из того, что я прочитал на этом веб-сайте, что у меня есть правильная логика, но я не уверен, как обращаться к свойствам объекта, а не только к самому объекту.

+1

Как бы вы могли получить доступ к свойствам объекта, если вы не выполняли итерацию? –

ответ

2

Когда вы говорите:

for (int i = 0; i <= self.array.count; i++) { 
    // ... inside the loop ... 
} 

... тогда, когда вы находитесь внутри цикла, каждый объект в массиве можно получить, один на одну итерацию, а [self.array objectAtIndex:i]. Так что возьмите это. Теперь у вас есть один из ваших объектов!

Теперь просто войдите в любое свойство этого объекта, который вам нравится. Вы, вероятно, захотите, чтобы листинг был правильным типа этого объекта, чтобы компилятор понимал, что это за объект, и позволит вам делать то, что вы хотите.

+1

Objective-C имеет более компактный способ итерации через NSArray, как справедливо указывает Джош, но я использовал ваши обозначения, чтобы начать то место, где вы начали. – matt

+0

Замечание о бросании является важным моментом, поскольку вы не можете использовать точечную нотацию на 'id', который является возвращаемым типом' objectAtIndex: ' –

1

Использовать fast enumeration вместо итерации по индексу, а затем доступ к объекту, как обычно.

for(id obj in myArray){ // Use a more specific type than id if possible 
    NSLog(@"%@", [obj prop]); 
} 

Другой вариант - использовать Block-based enumeration. Там вы напишете Блок, аргументом которого является объект из вашего массива. (Объекты представлены в блоке в порядке.)

[myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL * stop){ 
    NSLog(@"%@", [obj prop]); 
}]; 

В этом случае, у вас есть доступ к индексу, если вам это нужно по какой-то причине. stop argument allows early termination of the loop если вам это нужно.

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