CGFloat 比 Double 更准确吗?

xct*_*789 1 double range cgfloat ios swift

Double 和 CGFloat 都将相同的值打印到控制台 (#2),但只有 Double 发出警告 (#1):

(#1) - 警告

警告

(#2) - 将每个打印到控制台

DOUBLE  = 9.223372036854776e+18
CGFLOAT = 9.223372036854776e+18
Run Code Online (Sandbox Code Playgroud)

许多文章提到 CGFloat 在 32 位平台上是 Float,在 64 位平台上是 Double,但这不是仅指后备存储吗?幕后是否有更多因素导致 CGFloat 比 Double 更准确?

Ita*_*ber 5

CGFloat不代表BigDecimal无限精度的 - 类型数字。CGFloat 被定义为 astruct或包装 aDouble或 a Float,具体取决于您使用的是 32 位还是 64 位平台;即,在 64 位平台上,它相当于a Double没有更多或更少的精度或范围

您看到的警告的不同之处在于,它Double是 Swift 的原生类型,编译器知道它,并且有足够的信息以便能够提供这样的警告。CGFloat然而,它是由 Apple 框架定义的,编译器对它的了解不够,无法产生这样的警告。