当我使用componentsJoinedByString
时,我只会得到一长串数字。
编辑:我意识到这个任务令人困惑。如果他们想要一个NSString,为什么有人会在NSArray中填充NSNr?答案是我正在编写一个可扩展的单元测试框架。基本函数genNum
,genBool
和genChar
分别生成带有随机int,BOOL和char值的NSNumbers。然后有genArray
使用指定的生成器生成随机数组。因此,要构造一个随机NSString,可以使用genArray
生成器运行genChar
,并将生成的NSArray转换为NSString。
由于技术性原因,字符仅存储为NSNumber
而不是char
:genArray
接受一个块并调用块100次以填充NSArray。块必须包含ObjC对象;不是原始类型。
所以问题仍然存在:你如何加入[NSNumber numberWithChar:c]的NSArray进入NSString?
答案 0 :(得分:1)
componentsJoinedByString
将数组元素连接成一个字符串,它们之间有分隔符。使用NSString
方法将数组元素转换为字符串(如果还没有description
“。如果你有NSNumbers
的n数组,我希望得到一个有趣的结果。
答案 1 :(得分:1)
为什么不用[NSString stringWithCharacters:c length:1]
填充数组?然后componentsJoinedByString:
应该工作。 (查看stringWithCharacters:length:
上的文档;以上内容仅供参考。例如,您可能必须使用&c
。)
答案 2 :(得分:1)
+ (NSString *) genString {
NSArray* arr = [self genArray: ^() { return [ObjCheck genChar]; }];
NSMutableString* s = [NSMutableString stringWithCapacity: [arr count]];
int i;
for (i = 0; i < [arr count]; i++) {
[s appendString: [NSString stringWithFormat: @"%c", [[arr objectAtIndex: i] charValue]]];
}
return s;
}
答案 3 :(得分:0)
+ (id)genString {
NSArray *chars = [self genArray:^{ return [ObjCheck genChar]; }];
if ([chars count] == 0) {
return @"";
}
unichar *buffer = malloc(sizeof(unichar) * [chars count]);
[chars enumerateObjectsUsingBlock:^(NSNumber *num, NSUInteger idx, BOOL *stop) {
buffer[idx] = (unichar)[num charValue];
}];
return [[[NSString alloc] initWithCharactersNoCopy:buffer length:[chars count] freeWhenDone:YES] autorelease];
}
此特定解决方案将假设字符&gt; 127应被视为unicode代码点(对于字符大小的值,这基本上意味着为ISO-8859-1)。它还避免在创建结果字符串时复制缓冲区。