Właśnie zacząłem uczyć się Objective-C i stworzyłem małą aplikację kompasową, która wyświetli kierunek, gdy znajdzie się w zakresie nagłówków. Działa dobrze, ale zastanawiam się, czy istnieje bardziej zwięzły sposób zapisu go przy użyciu NSRange
. Po wielu poszukiwaniach wydaje się, że jest on używany raczej dla funkcji łańcuchowych niż liczb.Jak mogę użyć NSRange z liczbami całkowitymi, aby uprościć mój kod?
Próbowałem uczynić instancję z NSRange
moim punktem wyjścia, aby uczynić to bardziej zwięzłym, nie mogłem wyśledzić funkcji, która mogłaby się znaleźć, gdyby liczba przypadała na NSRange
.
Czy jestem tu na właściwym tropie, czy też sprawiam, że jest to bardziej szczegółowe niż to konieczne?
góry dzięki ..
Tu był mój failed skacząc punkt za próbę skrócenia się kod:
// If heading falls within this range, then display "S" for south
NSRange eastenRange = NSMakeRange (80, 100);
NSRange southernRange = NSMakeRange (170, 190);
etc...
Oto mój aktualny kod (działa poprawnie):
- (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:@"-"];
}
to generalnie lepiej w Cocoa i Cocoa touch używać architektura niezależne NSInteger i NSUInteger zamiast int. – Chuck
@Chuck: Racja. Ale OP używa '+ numberWithInt:', więc trzymam 'int' w kodzie. – kennytm
Dzięki, @KennyTM. Teraz dużo czystszy. @Chuck - wziął twój napiwek na NSUInteger i użył tego też. Początkowo użyłem numberWithInt: ponieważ nie wyrzucił wyjątku, więc go zatrzymałem. –