开发者

How to include a C array in -description

I'm trying to include the elements of an array in the NSString that's returned by the -description method in my class. 开发者_如何学CNo clue how to do this in Objective-C...in Java there's string concatenation or StringBuilder, what's the equivalent in Obj-C?

TIA..


Just use NSArray's componentsJoinedByString: method with whatever you want between them as the argument.

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

If you have a C array, you can turn it into an NSArray with NSArray *converted = [NSArray arrayWithObjects:yourCArray count:yourArrayCount].


The title of your thread talks about C arrays, so here's a modification of jsumners' answer that will deal wiith C arrays.

myArray is assumed to be an ivar declared thusly:

int* myArray;

storage for myArray is assumed to be malloc'd at some point and the size of it is in an ivar declared:

int myArraySize;

The code for description goes something like

- (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];
}

There are variations. The above version formats the string with bracket delimiters and commas between elements. Also, it returns an NSString instead of an NSMutableString which is not a big deal, but I feel that if you say you are returning an immutable object, you probably should.


The following could should "build" a string representation of your array. Notice that it is using the -description method of the objects in the array. If you want something different you will have to make the necessary change.


 - (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];
}

Edit:

As JeremyP said, I answered this using Objective-C arrays. I guess I just forgot the question when I started writing my code. I'm going to leave my answer as an alternative way to do it, though. I've also fixed the return string type from a mutable string to an immutable string (as it should be).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜