2013-03-25 4 views
-1

мне нужно вход х и у координат в пользовательский объект, вход с форматом «х, у»Часть NSString к NSNumber

я в настоящее время хранения вклада как NSString и нужно выведите целые числа и разделите их на отдельные NSNumbers. Если есть другой способ сохранить ввод, который будет проще, объясните.

Мне нужно сохранить x и y как отдельный NSNumbers, это также необходимо учитывать, если x и y - 2 цифры. то есть "23,4"

Может ли кто-нибудь помочь?

+2

Отделите входную строку компонентамиSeparatedByString с разделителем, являющимся запятой, чтобы вы могли иметь массив подмножеств. –

+0

что, если они не 2 цифры? –

+0

Почему бы не использовать CGPoint для хранения координат? –

ответ

3

Использование -[NSString componentsSeparatedByString:]

NSArray *numericComponents = [string componentsSeparatedByString:@","]; 
NSArray *numbers = [numericComponents map:^id(NSString *object) { 
         return @([object integerValue]); 
        }]; 

map здесь просто метод категории, что я добавил к NSArray:

@implementation NSArray (JRAdditions) 

- (NSArray *)map:(id(^)(id))block { 
    if([self count] == 0 || block == nil) return self; 

    NSMutableArray *mapped = [NSMutableArray new]; 
    NSArray  *copy = [self copy]; 

    for(id obj in copy) { 
     id mappedObject = block(obj); 

     if(mappedObject) { 
      [mapped addObject:mappedObject]; 
     } 
    } 

    return [mapped copy]; 
} 

@end 
+0

Извините im немного noob, я не понимаю, как это работает. не могли бы вы объяснить – flux

+0

@ user2113952 '@()' обертывает примитивное значение в объект-оболочку, такой как 'NSNumber' или' NSValue'. Я повторяю сборку, возвращенную из '-componentsSeparatedByString:', и создаю новую коллекцию, содержащую каждую числовую строку в качестве экземпляра 'NSNumber'. –

0
NSString *[email protected]"23,4"; 

NSArray *array=[str componentsSeparatedByString:@","]; 

NSNumber *[email protected]([array[0] integerValue]); 
NSNumber *[email protected]([array[1] integerValue]); 

Чтобы проверить, если они две цифры:

if ([xNum integerValue]>9 && [xNum integerValue]<100) { 
    NSLog(@"x is 2 digits"); 
} 
else{ 

} 
if([yNum integerValue]>9 && [yNum integerValue]<100) { 
    NSLog(@"y is 2 digits"); 
} 
else{ 

}