SCNVector3 组件的类型是什么? CGFloat 还是浮动?

What is the type of SCNVector3 components? CGFloat or Float?

苹果文档给出了SCNVector3的声明:

typedef struct SCNVector3 { CGFloat x, y , z; } SCNVector3;

或者在尝试编写重载函数时:

func * (left: SCNVector3, right: CGFloat) -> SCNVector3 {
    return SCNVector3Make(left.x * right, left.y * right, left.z * right)
}

我收到 "cannot invoke '' with an argument list of type" 错误。 left.x、left.y 和 left.z 不应该是 CGfloat 吗?

如何以及何时决定 CGFloat 是双精度型还是浮点型?

在iOS 8.1 SDK header中,SCNVectorX类型是基于Float的,可以看出 通过命令单击 SCNVector3:

struct SCNVector3 {
    var x: Float
    var y: Float
    var z: Float
}

func SCNVector3Make(x: Float, y: Float, z: Float) -> SCNVector3

这与使用 CGFloat 的 OS X 10.10 SDK 不同。所以文档 似乎是错误的。以下在 iOS 项目中编译:

func * (left: SCNVector3, right: Float) -> SCNVector3 {
    return SCNVector3Make(left.x * right, left.y * right, left.z * right)
}