2010-06-11 38 views
0

我试图在我的类中的-description方法返回的NSString中包含数组的元素。没有线索如何在Objective-C中做到这一点...在Java中有字符串连接或StringBuilder,Obj-C中的等价物是什么?如何在描述中包含C数组

TIA ..

回答

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数组。我想我刚开始写代码时就忘记了这个问题。尽管如此,我将会把我的答案作为一种替代方法来实现。我也将返回字符串类型从可变字符串修复为不可变字符串(因为它应该是这样)。

+0

是的,你这样做。 returnString需要自动发布。 – JeremyP 2010-06-11 13:08:21

+0

修好了,谢谢。 – 2010-06-11 13:12:42

+0

其他问题[myArr objectAtIndex:** 0 **] – JeremyP 2010-06-11 13:28:00

0

你的线程的标题是关于C数组的,所以这里是对用C数组处理的jsumners的答案的一个修改。

myArray的被假定为一个的ivar正是如此宣称:假定

int* myArray; 

储存myArray的在某一时刻要被malloc分配和它的大小是在一个实例变量声明:

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,这不是一个大问题,但我觉得如果你说你正在返回一个不可变的对象,你可能应该这样做。

1

只要使用NSArray的componentsJoinedByString:方法以及它们之间任何你想要的参数作为参数。

NSString *elementsSquishedTogether = [myArray componentsJoinedByString:@""]; 
NSString *connectedByACommaAndSpace = [myArray componentsJoinedByString:@", "]; 

如果你有一个C数组,你可以用NSArray *converted = [NSArray arrayWithObjects:yourCArray count:yourArrayCount]把它变成一个NSArray。

+0

我可能会补充说* *描述*已经由NSArray提供,所以只需将C数组添加到NSArray就可以为您提供NSArray的内置字符串格式。这可能并不理想,但如果是的话,这很方便。 – 2010-06-11 16:30:04

+0

我以为这样的方法存在,但是当我回顾文档时,我必须掩盖它。 – 2010-06-11 17:24:49

+0

arrayWithObjects:count:仅在C数组中的东西是OBjective-C对象时才起作用。 – JeremyP 2010-06-14 07:25:04