2013-06-06 5 views
-2

мне нужно определить два значения в строке отдельноВычислить два значения в строке отдельно

пример значение «legCentimetres» из которых: -

'15 -18'

применять дюймов, а затем вернуть обратно вместе. То, что я сделал только кажется, чтобы вычислить первый бит, на данный момент он выходит как: -

15см/5.9in

но должен выглядеть следующим образом: -

15-18cm/5.9- 7.1in

Какие изменения следует внести в код ниже, чтобы сделать эту работу?

- (NSString *)textForIndexPath:(NSIndexPath *)indexPath isTitle:(BOOL)isTitle { 
    NSString *result = @""; 
    double legCentimetres = [self.animal.legSpan doubleValue]; 
    double legInches = lcm/2.54; 
    switch (indexPath.row) { 
     case 0: 
      result = (isTitle)? @"Habitat" : self.animal.habitat; 
      break; 
     case 1: 
      result = (isTitle)? @"Leg Span" : [NSString stringWithFormat:@"%dcm/%.1fin", (int)legCentimetres, legInches]; 
      break; 
     default: 
      break; 
    } 
    return result; 
} 
+0

Этот ответ должен получить вас там: http://stackoverflow.com/a/10099661/1180785 – Dave

ответ

1
- (NSString *)textForIndexPath:(NSIndexPath *)indexPath isTitle:(BOOL)isTitle { 
    NSString *result = @""; 
    double legCentimetresMin = [[[self.animal.legSpan componentsSeparatedByString:@"-"] objectAtIndex:0] doubleValue]; 
    double legCentimetresMax = [[[self.animal.legSpan componentsSeparatedByString:@"-"] objectAtIndex:1] doubleValue]; 
    double legInchesMin = legCentimetresMin/2.54; 
    double legInchesMax = legCentimetresMax/2.54; 
    switch (indexPath.row) { 
     case 0: 
      result = (isTitle)? @"Habitat" : self.animal.habitat; 
      break; 
     case 1: 
      result = (isTitle)? @"Leg Span" : [NSString stringWithFormat:@"%d-%dcm/%.1f-%.1fin", (int)legCentimetresMin, (int)legCentimetresMax, legInchesMin, legInchesMax]; 
      break; 
     default: 
      break; 
    } 
    return result; 
} 
+0

Ты гениальный гений! Первый раз! замечательная работа, спасибо за вашу помощь – user2461049

+0

Кажется глупым делать 'componentsSeparated ...' дважды. И калькулятор legInchesMin/Max должен быть перемещен во внутренний регистр 1, так как случай 0, по-видимому, даже не гарантирует, что существует «legSpan». –

+0

Зачем разделять одну и ту же строку дважды? Вызовите 'componentsSeparatedByString:' только один раз и сохраните результат в массиве, чтобы вы могли получить доступ к каждой части по мере необходимости. – rmaddy

0

Это, кажется, хороший способ, хотя вы, вероятно, можете немного уменьшить его. Я беру ноги и разделяю его на два числа (диапазон в сантиметрах), затем перечисляю через эти сантиметры, конвертируя их в дюймы. Оттуда я добавляю их в массив, где позже могу преобразовать их в NSString.

- (NSString *)textForIndexPath:(NSIndexPath *)indexPath isTitle:(BOOL)isTitle { 
    NSString *result = @""; 
    switch (indexPath.row) { 
     case 0: 
      result = (isTitle)? @"Habitat" : self.animal.habitat; 
      break; 
     case 1 { 
      NSString *legSpan = self.animal.legSpan; 
      NSArray *centimetres = [legSpan componentsSeparatedByString:@"-"]; 
      NSMutableArray *inches = [NSMutableArray array]; 
      NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; 
      [fmt setMaximumFractionDigits:1]; 
      [centimetres enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
       [inches addObject:[fmt stringFromNumber:@([obj doubleValue]/2.54)]]; 
      }]; 
      NSString *inchString = [[inches componentsJoinedByString:@"-"] stringByAppendingString:@"in"]; 
      NSString *cmString = [legSpan stringByAppendingString:@"cm"]; 

      result = (isTitle)? @"Leg Span" : [NSString stringWithFormat:@"%dcm/%.1fin", cmString, inchString]; 
      break; 
     } 
     default: 
      break; 
    } 
    return result; 
} 
+0

Выглядит хорошо! теперь просто нужно разобраться, как сажать в мой код .. Я обновил свой код, чтобы показать полный раздел – user2461049

+0

Спасибо за вашу помощь! – user2461049

+0

Я обновил код для работы с вашим методом. –

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