我需要创建一个CGSize来计算任意长度文本的高度。UIKit有一个很好的方法-sizeWithFont:constrainedToSize:,我的文本只受到宽度的限制,而不受高度的限制。
为此,我需要将最大可能的CGFloat设置为高度。
是否有像"CGFloatMax"这样的常量?
我需要创建一个CGSize来计算任意长度文本的高度。UIKit有一个很好的方法-sizeWithFont:constrainedToSize:,我的文本只受到宽度的限制,而不受高度的限制。
为此,我需要将最大可能的CGFloat设置为高度。
是否有像"CGFloatMax"这样的常量?
对于使用Swift 2的人,应该使用:
CGFloat.max
对于使用 Swift 3 的用户,你应该使用:
CGFloat.greatestFiniteMagnitude
请注意,当Swift 3发布时,CGFloat.max
已被移除,这在文档中有所体现。
CGFloat.greatestFiniteMagnitude
:"对应于C语言中的宏FLT_MAX、DBL_MAX等。这些宏的命名可能有些误导,因为无穷大是大于此值的。" - jemmons我正在寻找一个Swift版本的最小CGFloat值,然后就来到了这里。如果你也是这样的话,那么这里就有答案:
CGFloat.leastNormalMagnitude
CGFloat
只是一个float
,因此您可以安全地使用<float.h>
中的FLT_MAX
。
编辑:正如其他人现在指出的那样,看起来已经为您定义了CGFLOAT_MAX
,因此为了保持一致性,您应该使用它而不是FLT_MAX
,即使它们在32位平台上相同。
CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);
宽度为0.0000000000000000000000000000000000000117549435,高度为3.40282347E+38。
CGFloat numRot = floorf(CGFLOAT_MAX / 360.0);
NSLog(@"numRot = %.2f", numRot);
输出:
numRot = inf
鉴于,这段代码:
CGFloat numRot = floorf(FLT_MAX / 360.0);
NSLog(@"numRot = %.2f", numRot);
正确地输出:
numRot: 945228740662580166143622731901435904.00
我按下command+点击CGFLOAT_MAX,Xcode将我带到了CoreGraphics框架的CGBase.h文件,并显示以下宏定义:
# define CGFLOAT_MAX DBL_MAX
typedef CGFLOAT_TYPE CGFloat;
然后我按住command键点击CGFLOAT_TYPE,它就会跳转到这里的#define行:
#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
...
所以,由于某种原因,我的CGFloat变量应该是一个double,但是当它被赋予一个double值(即CGFLOAT_MAX)时,它似乎是一个会溢出的float。据我所知这个苹果文档页面表明使用%f与NSLog应该打印double - 如果我错了,请有人纠正我。
总之,如果FLT_MAX适用于您的情况,您可能希望暂时坚持使用它,而不是CGFLOAT_MAX,特别是如果您依赖于一个专门接受浮点参数而不是double或CGFloat的库。