Mat*_*ler 6 objective-c ios nsrange
我刚刚开始学习Objective-C并制作了一个小指南针应用程序,当它落入一系列标题时会显示方向.它工作得很好,但我想知道是否有更简洁的方式来编写它NSRange.经过大量的研究,似乎NSRange更多地用于字符串函数而不是数字.
我尝试制作一个NSRange我的出发点的实例,使其更加简洁,我无法找到一个数字落在一个数字内的函数NSRange.
我在这里走在正确的轨道上,还是我让它变得比它需要的更冗长?
提前致谢..
这是我试图缩短代码的失败点:
// If heading falls within this range, then display "S" for south
NSRange eastenRange = NSMakeRange (80, 100);
NSRange southernRange = NSMakeRange (170, 190);
etc...
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码(工作正常):
- (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:@"-"];
}
Run Code Online (Sandbox Code Playgroud)
迟到了,但以下会工作并利用我相信的范围:
NSRange easternRange = NSMakeRange (80, 20);
NSRange southernRange = NSMakeRange (170, 20);
NSInteger heading = 92;
if (NSLocationInRange(heading,easternRange)) {
NSLog(@"Heading Easterly.");
} else if (NSLocationInRange(heading,southernRange)) {
NSLog(@"Heading southerly.");
}
Run Code Online (Sandbox Code Playgroud)
等等
\n\n\n我是否让这个变得比需要的更冗长?
\n
是的。当你想要进行数值运算时,请避免使用 NSNumber。NSNumber 类的存在只是因为像 NSArray、NSDictionary 等 Objective-C 集合只能保存 Objective-C 对象。否则,您应该始终使用普通的intorNSInteger或CGFloat等double。
int heading = [newHeading trueHeading];\n headingLabel.text = [NSString stringWithFormat:@"%d\xc2\xb0", heading];\n\n if (10 < heading || heading > 350)\n directionLabel.text = @"N";\n else if (80 < heading && heading < 100)\n directionLabel.text = @"E";\n // and so on.\nRun Code Online (Sandbox Code Playgroud)\n\n您不需要使用 NSRange。
\n| 归档时间: |
|
| 查看次数: |
19361 次 |
| 最近记录: |