容易忘记,尽管名为 CGFloat,但其实际上是 double 类型。在 64 位系统中,如果 CGFLOAT_IS_DOUBLE 被设置为 1,它实际上将是 double。
当您开发一个需要在 32 位和 64 位系统上构建的单一代码库的应用程序时,例如在针对 32 位模拟器开发并部署 arm64 时,这可能会变得不方便。
CGFloatType 是一个简单的库,它提供了在 NSNumber 上处理这些方法的功能,并提供接受 CGFloat 的各种数学和舍入函数。
这可以帮助您将
#if CGFLOAT_IS_DOUBLE
CGFloat points = ceil(pointsPerMinute * durationMinutes);
#else
CGFloat points = ceilf(pointsPerMinute * durationMinutes);
#endif
转换为类似
CGFloat points = ceilCGFloat(pointsPerMinute * durationMinutes);
#import <CGFloatType/CGFloatType.h>
@implementation Example
- (void)example {
NSNumber *number = [NSNumber numberWithCGFloat:CGRectGetHeight(self.view.frame)];
NSLog(@"NSNumber with value: %@", number);
CGFloat value = [number CGFloatValue];
CGFloat floorValue = floorCGFloat(value);
CGFloat ceilValue = ceilCGFloat(value);
NSLog(@"%@ (floor = %@, ceil = %@)", @(value), @(floorValue), @(ceilValue));
}
@end
pod 'CGFloatType'
CGFloatType 在 BSD 许可证下发布。参见 LICENSE。