我正在尝试在我的类中的-description方法返回的NSString中包含数组的元素。不知道如何在Objective-C中做到这一点...在Java中有字符串连接或StringBuilder,Obj-C中的等价物是什么?
TIA ..
答案 0 :(得分:1)
只需使用NSArray的componentsJoinedByString:
方法,将它们之间的任何内容作为参数。
NSString *elementsSquishedTogether = [myArray componentsJoinedByString:@""];
NSString *connectedByACommaAndSpace = [myArray componentsJoinedByString:@", "];
如果您有C数组,可以将其转换为带有NSArray *converted = [NSArray arrayWithObjects:yourCArray count:yourArrayCount]
的NSArray。
答案 1 :(得分:0)
以下内容可以“构建”数组的字符串表示形式。请注意,它正在使用数组中对象的-description
方法。如果你想要不同的东西,你将不得不做出必要的改变。
- (NSString *)description: (id) myArr {
NSMutableString *returnString = [[[NSMutableString alloc] init] autorelease];
for (int i = 0, j = [myaArr count]; i < j; i++) {
[returnString appendString: [[myArr objectAtIndex: i] description]];
}
return [NSString stringWithString: returnString];
}
修改强>
正如JeremyP所说,我使用Objective-C数组回答了这个问题。我想我开始编写代码时忘记了这个问题。不过,我将把我的答案作为另一种方式来做。我还将返回字符串类型从可变字符串修改为不可变字符串(应该是这样)。
答案 2 :(得分:0)
你的线程的标题谈论C数组,所以这里是对jsumners的回答的修改,它将处理与C数组相关的。
myArray被假定为如此声明的ivar:
int* myArray;
假设myArray的存储在某个时刻被malloc化,并且它的大小是在声明的ivar中:
int myArraySize;
描述代码类似于
- (NSString *)description
{
NSMutableString *returnString = [[[NSMutableString alloc] init] autorelease];
for (int i = 0 ; i < myArraySize ; i++)
{
if (i > 0)
{
[returnString appendString: @", "];
}
[returnString appendFormat: @"%d", myArray[i]];
}
return [NSString stringWithFormat: @"[%@]", returnString];
}
有变化。上面的版本使用括号分隔符和元素之间的逗号来格式化字符串。此外,它返回一个NSString而不是NSMutableString,这不是什么大不了的事,但我觉得如果你说你正在返回一个不可变对象,你可能应该这样做。