为什么 SceneKit 中没有运算符重载?
Why are there no operator overloads in SceneKit?
对我来说,为 SCNMatrix4
和 SCNVector3
等类型的运算符添加重载似乎是一个显而易见的想法,但 Apple 似乎选择使用静态全局函数(例如 SCNMatrix4Mult
).虽然矩阵乘法和向量加法等运算符添加起来很简单,但我想知道:
- 是否有任何理由在 Swift 中避免此类重载?
- 是否有用于此类重载的规范库?我发现了这些:
- 除了以下内容之外,还有什么要实现的吗?
示例实现:
func * (left: SCNMatrix4, right: SCNMatrix4) -> SCNMatrix4 {
return SCNMatrix4Mult(left, right)
}
func + (left: SCNVector3, right: SCNVector3) -> SCNVector3 {
return SCNVector3Make(left.x + right.x, left.y + right.y, left.z + right.z)
}
这些函数是为 Objective-C 编写的 SceneKit 实用程序,只需按原样导出到 Swift。我同意将它们作为运算符而不是全局函数会很好,但看起来相关代码尚未编写。
请注意,如果您希望您的代码更具表现力和效率,您可以轻松利用 SCNNode
上新的基于 SIMD 的 API。您可以在 .
中找到示例
对我来说,为 SCNMatrix4
和 SCNVector3
等类型的运算符添加重载似乎是一个显而易见的想法,但 Apple 似乎选择使用静态全局函数(例如 SCNMatrix4Mult
).虽然矩阵乘法和向量加法等运算符添加起来很简单,但我想知道:
- 是否有任何理由在 Swift 中避免此类重载?
- 是否有用于此类重载的规范库?我发现了这些:
- 除了以下内容之外,还有什么要实现的吗?
示例实现:
func * (left: SCNMatrix4, right: SCNMatrix4) -> SCNMatrix4 {
return SCNMatrix4Mult(left, right)
}
func + (left: SCNVector3, right: SCNVector3) -> SCNVector3 {
return SCNVector3Make(left.x + right.x, left.y + right.y, left.z + right.z)
}
这些函数是为 Objective-C 编写的 SceneKit 实用程序,只需按原样导出到 Swift。我同意将它们作为运算符而不是全局函数会很好,但看起来相关代码尚未编写。
请注意,如果您希望您的代码更具表现力和效率,您可以轻松利用 SCNNode
上新的基于 SIMD 的 API。您可以在