I think is fine but If I were you I probably will try to find some kind of 
function that gives me the same result as using enumerators

For example in this case I will use UIColor colorWithRed:green:blue:alpha 
method and use the radius to determine components of a color 
When numerator objects are just a few like this case is ok, but when you have 
many many possibilities finding a function is the best option you have.
(although there is no such a function sometimes)

I hope this helps. 
Ignacio

Message: 5
Date: Mon, 17 May 2010 14:32:18 +0100
From: Carlton Gibson <li...@noumenal.co.uk>
Subject: Style Advice for using NSEnumerator
To: Cocoa Developer <cocoa-dev@lists.apple.com>
Message-ID: <4509929f-8b9b-4db3-9832-9ad968124...@noumenal.co.uk>
Content-Type: text/plain;    charset=us-ascii


Hi All, 

I'm still coming to grips with Cocoa and I'm wondering if any list members 
would be kind enough just to review a small code fragment for style advice...

The following occurs as part of the drawRect method of a UIView subclass. The 
method simply draws concentric circles inside the view. (It's part of an 
exercise from the Big Nerd Ranches iPhone Programming book, which I'm enjoying 
a lot.)

Originally the routine simply drew the circles in a single color but the book 
sets the problem of having it draw them in assorted colors so I came up with 
this:

// Set up the stroke colors (and the variables for enumeration)
NSArray *strokeColors = [NSArray arrayWithObjects:
   @"redColor", @"orangeColor", @"yellowColor", @"greenColor",
   @"blueColor", @"cyanColor", @"magentaColor", nil]; 
NSEnumerator *enumerator = nil;
NSString *colorString;
   
// Draw concentric circles from the outside in
for (float currentRadius = maxRadius;
    currentRadius > 0;
    currentRadius -= 20)
{
   // Determine stroke color
   if (!(colorString = [enumerator nextObject])) {
       enumerator = [strokeColors objectEnumerator];
       colorString = [enumerator nextObject];
   }
   SEL selector = NSSelectorFromString(colorString);
   [[UIColor performSelector:selector] setStroke];

   // Do Drawing
   CGContextAddArc(context, center.x, center.y,
       currentRadius, 0.0, M_PI * 2.0, YES);
   CGContextStrokePath(context);
}

My question concerns the use the NSEnumerator here. The code works, but is it 
_right_? In particular, I'm slightly nervous about relying on the enumerator 
being nil first time through the loop, and on testing the return value of 
nextObject in the conditional -- perhaps though this is just an idiom I need to 
get used to?

Any thoughts from more seasoned Cocoa hands as to how to handle this sort of 
situation would be appreciated! :-)

Thanks in advance.

Regards,
Carlton
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to