Acabo de empezar a aprender Objective-C e hice una pequeña aplicación de brújula que mostrará una dirección cuando se trata de una variedad de títulos. Funciona muy bien, pero me pregunto si hay una forma más concisa de escribirlo usando NSRange
. Después de mucho mirar, parece que NSRange
se usa más para las funciones de cadena en lugar de números.¿Cómo puedo usar NSRange con enteros para simplificar mi código?
He intentado hacer una instancia de NSRange
mi punto de partida para hacer esto más conciso, no pude localizar la función que encontraría si un número se encuentra dentro de un NSRange
.
¿Estoy en el camino correcto aquí, o estoy haciendo esto más detallado de lo que debe ser?
Gracias de antemano ..
Aquí fue mi fallidos punto de partida para tratar de acortar el código:
// If heading falls within this range, then display "S" for south
NSRange eastenRange = NSMakeRange (80, 100);
NSRange southernRange = NSMakeRange (170, 190);
etc...
Aquí está mi código actual (funciona bien):
- (void)locationManager:(CLLocationManager *)manager
didUpdateHeading:(CLHeading *)newHeading
{
// Define and display the heading
NSNumber *theHeading = [NSNumber numberWithInt:[newHeading trueHeading]];
[headingLabel setText:[NSString stringWithFormat:@"%@°", theHeading]];
// Define the range of directions
NSNumber *northLowerRange = [NSNumber numberWithInt:10];
NSNumber *northUpperRange = [NSNumber numberWithInt:350];
NSNumber *eastLowerRange = [NSNumber numberWithInt:80];
NSNumber *eastUpperRange = [NSNumber numberWithInt:100];
NSNumber *southLowerRange = [NSNumber numberWithInt:170];
NSNumber *southUpperRange = [NSNumber numberWithInt:190];
NSNumber *westLowerRange = [NSNumber numberWithInt:260];
NSNumber *westUpperRange = [NSNumber numberWithInt:280];
// If the heading falls within the correct ranges, then display the direction
if ([northLowerRange compare:theHeading] == NSOrderedDescending || [northUpperRange compare:theHeading] == NSOrderedAscending)
[directionLabel setText:@"N"];
else if ([eastLowerRange compare:theHeading] == NSOrderedAscending && [eastUpperRange compare:theHeading] == NSOrderedDescending)
[directionLabel setText:@"E"];
else if ([southLowerRange compare:theHeading] == NSOrderedAscending && [southUpperRange compare:theHeading] == NSOrderedDescending)
[directionLabel setText:@"S"];
else if ([westLowerRange compare:theHeading] == NSOrderedAscending && [westUpperRange compare:theHeading] == NSOrderedDescending)
[directionLabel setText:@"W"];
else
[directionLabel setText:@"-"];
}
es generalmente mejor en Cocoa y Cocoa Touch para utilizar la arquitectura independiente de NSInteger y NSUInteger en lugar de int. – Chuck
@Chuck: Correcto. Pero OP usa '+ numberWithInt:' así que guardo el 'int' en el código. – kennytm
Gracias, @KennyTM. Mucho más limpio ahora. @Chuck - tomó su consejo sobre NSUInteger y lo usó también. Inicialmente usé numberWithInt: porque no arrojó una excepción, así que lo guardé. –