Построить строку с переменным количеством ключей и форматов - PullRequest
2 голосов
/ 26 мая 2011

У меня есть объект NSDictionary, который содержит мои данные.Я передаю массив имен ключей и формат отображения для строкового представления моих данных.

[self displayMyDataWithTheseKeys:myKeyArray inThisFormat:myFormat];

, где, например,

myKeyArray = [NSArray arrayWithObjects: @"Key1", @"Key2", nil];

myFormat = [NSString stringWithString: @"%@ to the %@ degree"];

Однако myFormat может измениться иколичество ключей в массиве также может варьироваться.

Если бы количество элементов в массиве всегда было 2, это было бы тривиально.Тем не менее, как я могу обрабатывать переменное количество элементов?

Ответы [ 2 ]

0 голосов
/ 27 мая 2011

Для этого на самом деле нет встроенного метода, но с помощью NSScanner сравнительно легко разобрать строки формата. Вот простой пример, он обрабатывает только %@ спецификаторы формата, но, поскольку все элементы в NSArray являются объектами, а не примитивными типами, это не должно иметь значения:

NSArray *myKeyArray = [NSArray arrayWithObjects: @"Key1", @"Key2", nil];
NSString *myFormat = [NSString stringWithString: @"%@ to the %@ degree"];

NSMutableString *result = [NSMutableString string];
NSScanner *scanner = [NSScanner scannerWithString:myFormat];
[scanner setCharactersToBeSkipped:[NSCharacterSet illegalCharacterSet]];
int i = 0;
while (![scanner isAtEnd]) {
    BOOL scanned = [scanner scanString:@"%@" intoString:NULL];
    if (scanned) {
        if (i < [myKeyArray count]) {
            [result appendString:[myKeyArray objectAtIndex:i]];
            i++;
        } else {
            //Handle error: Number of format specifiers doesn't 
            //match number of keys in array...
        }
    }
    NSString *chunk = nil;
    [scanner scanUpToString:@"%@" intoString:&chunk];
    if (chunk) {
        [result appendString:chunk];
    }
}
0 голосов
/ 27 мая 2011

Использование: stringByAppendingString

Вот пример того, как его использовать:

NSString *someString = @"String";

someString = [someString stringByAppendingString:[NSString stringWithFormat:@"%@",variable1]];
someString = [someString stringByAppendingString:[NSString stringWithFormat:@"%@",variable2]];
someString = [someString stringByAppendingString:[NSString stringWithFormat:@"%@",variable3]];

... и т. Д.

Если у вас есть массив ключей, которые вы хотите поместить в строку:

NSString *string = @"And the keys are:\n";

    for(int i = 0; i < [array count]; i++)
    {
        NSString *thisKey = (NSString *)[array objectAtIndex:i];

        string = [string stringByAppendingString:[NSString stringWithFormat:@"Key number %d is %@",i,thisKey]];
    }
...