【发布时间】:2014-07-31 14:30:05
【问题描述】:
我需要将值存储为Float,但源数据是CGFloat:
let myFloat : Float = myRect.origin.x
但这会导致编译器错误:“NSNumber”不是子类型“Float”
所以如果我像这样明确地转换它:
let myFloat : Float = myRect.origin.x as Float
但这反过来会导致编译器错误:'Cannot convert the expression's type 'Float' to 'Float''
请问,这样做并满足编译器的正确方法是什么?
【问题讨论】:
-
请注意,在 64 位系统上,将 CGFloat 转换为 Float 会丢失精度 - CGFloat 在 64 位系统上为 64 位,在 32 位系统上为 32 位,Float 始终为 32 位。为避免这种情况,您可以使用 Double 而不是 Float。
-
如果您在 Xcode 中深入研究 CGFloat 并查看它的定义位置,您会看到它在 32 位架构上被 typedef 为浮点数,在 64 位架构上被定义为双精度。