Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 生成具有可变键数和格式的字符串_Iphone_Objective C_Nsstring_Ipad_String Formatting - Fatal编程技术网

Iphone 生成具有可变键数和格式的字符串

Iphone 生成具有可变键数和格式的字符串,iphone,objective-c,nsstring,ipad,string-formatting,Iphone,Objective C,Nsstring,Ipad,String Formatting,我有一个包含数据的NSDictionary对象。我正在传递一个键名数组和数据的字符串表示的显示格式 [self displayMyDataWithTheseKeys:myKeyArray inThisFormat:myFormat]; 比如说 myKeyArray = [NSArray arrayWithObjects: @"Key1", @"Key2", nil]; myFormat = [NSString stringWithString: @"%@ to the %@ degree"]

我有一个包含数据的NSDictionary对象。我正在传递一个键名数组和数据的字符串表示的显示格式

[self displayMyDataWithTheseKeys:myKeyArray inThisFormat:myFormat];
比如说

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

myFormat = [NSString stringWithString: @"%@ to the %@ degree"];
但是,myFormat可能会更改,数组中的键数也可能会有所不同

如果数组中的元素数始终为2,这将是微不足道的。但是,如何处理数量可变的元素?

使用:

下面是一个关于如何使用它的示例:

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]];
    }
NSString*string=@”,键是:\n;
对于(int i=0;i<[数组计数];i++)
{
NSString*thisKey=(NSString*)[array objectAtIndex:i];
string=[string stringByAppendingString:[NSString stringWithFormat:@“键号%d为%@”,i,thisKey]];
}
使用:

下面是一个关于如何使用它的示例:

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]];
    }
NSString*string=@”,键是:\n;
对于(int i=0;i<[数组计数];i++)
{
NSString*thisKey=(NSString*)[array objectAtIndex:i];
string=[string stringByAppendingString:[NSString stringWithFormat:@“键号%d为%@”,i,thisKey]];
}

这方面没有真正的内置方法,但使用
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];
    }
}
NSArray*myKeyArray=[NSArray数组中的对象:@“Key1”,“Key2”,nil];
NSString*myFormat=[NSString stringWithString:@“%@到%@度”];
NSMutableString*结果=[NSMutableString];
NSScanner*scanner=[NSScanner scannerWithString:myFormat];
[scanner setCharacterStobeskiped:[NSCharacterSet illegalCharacterSet]];
int i=0;
而(![scanner isattend]){
BOOL scanned=[扫描仪扫描字符串:@“%@”intoString:NULL];
如果(扫描){
如果(i<[myKeyArray计数]){
[结果appendString:[myKeyArray objectAtIndex:i]];
i++;
}否则{
//句柄错误:格式说明符的数量不正确
//匹配数组中的键数。。。
}
}
NSString*chunk=nil;
[扫描程序扫描到字符串:@“%@”到字符串:&块];
如果(块){
[结果追加字符串:块];
}
}

这方面没有真正的内置方法,但使用
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];
    }
}
NSArray*myKeyArray=[NSArray数组中的对象:@“Key1”,“Key2”,nil];
NSString*myFormat=[NSString stringWithString:@“%@到%@度”];
NSMutableString*结果=[NSMutableString];
NSScanner*scanner=[NSScanner scannerWithString:myFormat];
[scanner setCharacterStobeskiped:[NSCharacterSet illegalCharacterSet]];
int i=0;
而(![scanner isattend]){
BOOL scanned=[扫描仪扫描字符串:@“%@”intoString:NULL];
如果(扫描){
如果(i<[myKeyArray计数]){
[结果appendString:[myKeyArray objectAtIndex:i]];
i++;
}否则{
//句柄错误:格式说明符的数量不正确
//匹配数组中的键数。。。
}
}
NSString*chunk=nil;
[扫描程序扫描到字符串:@“%@”到字符串:&块];
如果(块){
[结果追加字符串:块];
}
}

但是,这并不能提供我想要的格式。感谢您提供的帮助,但这仍然不能提供我想要的格式…您的解决方案忽略了myFormat变量,该变量显示包含所有变量的格式。但是,这不会为我提供所需的格式。感谢您提供的帮助,但这仍然无法为我提供所需的格式…您的解决方案将忽略myFormat变量,该变量显示包含所有变量的格式。您可以扫描%@、%I、%d、。。。在myFormat字符串中,将其拆分为仅包含单个格式说明符的子字符串,然后对所有这些子字符串逐个执行格式替换,最后将所有内容合并为单个字符串。我还没有尝试过。你可以扫描%@、%I、%d、。。。在myFormat字符串中,将其拆分为仅包含单个格式说明符的子字符串,然后对所有这些子字符串逐个执行格式替换,最后将所有内容合并为单个字符串。不过我还没试过。