Понимание перечислений - PullRequest
0 голосов
/ 04 мая 2011

Может ли кто-нибудь заполнить оставшуюся часть этой строки?Я просто не понимаю перечисление без примера.Я пытаюсь упорядочить вид таблицы по расстоянию, наиболее близкому к пользователю.Приведенный ниже код является частью широты, которая пытается перечислить через список данных (объект с индексом 4 - это широта, хранимая как NSNumber, clubLocation и myLocation - это методы, которые возвращают местоположение места и пользователя соответственно).Как работает перечисление и что оно возвращает?Массив?Как мне синхронизировать результаты массива с другими частями списка, например, с именем местоположения?Большое спасибо.

-(NSArray *)distanceFromLat
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Data3" ofType:@"plist"];
    NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

    NSMutableArray *latitudeArray = [[NSMutableArray alloc] init];
    latitudeArray = [[tempDictionary objectForKey:@"Subtree"]objectAtIndex:4];

    NSEnumerator *enumLat = [latitudeArray objectEnumerator];
    id object;

    while ((object = [enumLat nextObject])) {
        [myLocation distanceFromLocation:clubLocation];
    }

}

1 Ответ

1 голос
/ 04 мая 2011

почему бы не использовать "быстрое перечисление"?

for (id latitude in latitudeArray) {
..
}

, где вы можете заменить id фактическим типом ваших объектов широты в массиве. Согласно вашим комментариям это будет NSNumber.

Стиль нумерации NSEnumerator работает точно так же. Каждый объект в цикле является одним объектом из массива, массив перечисляется так, что каждый объект, который он содержит, доступен один раз. «Быстрое перечисление» приятнее, потому что оно на самом деле быстрее и концептуально легко увидеть, что происходит - «для всех х в у».

Чтобы отсортировать ваши широты по расстоянию от пользователя для отображения таблицы, вы можете создать изменяемый словарь с ключом из расстояния от пользователя (NSNumber) и объектом, который является индексом этой широты в вашем latitudeArray (NSNumber). Затем используйте allKeys в этом словаре, чтобы получить массив всех ключей NSNumber, отсортировать его с помощью sortedArrayUsingSelector:@selector(compare:) и отобразить легко - первая запись в таблице будет получена путем взятия первого ключа в отсортированном массиве и получения его индекса ключи в словаре, а затем использовать этот индекс для получения правильной широты от latitudeArray.

...