swift - 为什么即使我分配了所有属性,我也需要使用 self.init() 初始化结构?
问题描述
在simd_float4x4
,columns
是唯一的属性,但是,这不会仅仅因为我没有调用self.init()
. 无论如何,一切都会被初始化。为什么编译器会抱怨?我在这个视频中看到了类似的东西,它正在工作。为什么我做不到?
extension simd_float4x4 {
init(ProjectionFrame: CGSize) {
let Y = FOV(), FarZ = Float((Settings.VisibilityRange+1)*2), Z = FarZ / (NearZ - FarZ)
columns = (vector_float4(Y / Float(ProjectionFrame.width / ProjectionFrame.height), 0, 0, 0), vector_float4(0, Y, 0, 0), vector_float4(0, 0, Z, -1), vector_float4(0, 0, Z * NearZ, 0))
}
}
在视频中我注意到了这一点。
extension simd_float4x4 {
init(translationX x: Float, x: Float, x: Float) {
columns = (
vector_float4(x, 0, 0, 0),
vector_float4(0, x, 0, 0),
vector_float4(0, 0, x, 0),
vector_float4(0, 0, 0, 1)
)
}
}
编译器并没有抱怨。它怎么会抱怨我?
解决方案
而不是试图columns
从你的设置init
,你应该只调用self.init(_ columns:)
并传入 4 vector_float4
s 作为 anArray
而不是作为 a tuple
。
extension simd_float4x4 {
init(ProjectionFrame: CGSize) {
let Y = FOV(), FarZ = Float((Settings.VisibilityRange+1)*2), Z = FarZ / (NearZ - FarZ)
self.init([vector_float4(Y / Float(ProjectionFrame.width / ProjectionFrame.height), 0, 0, 0), vector_float4(0, Y, 0, 0), vector_float4(0, 0, Z, -1), vector_float4(0, 0, Z * NearZ, 0)])
}
}
该视频已有 2 年历史,因此使用的是较旧的 Swift 版本。您从该视频链接的代码也无法在 Swift 5 中编译。
与您的问题无关,但 Swift 中的变量名称应该是 lowerCamelCase,projectionFrame
正确的命名也是如此。
推荐阅读
- python - 在 Mechanize 中发出 LoadControl XHR 请求
- ansible - Ansible debg 模块彩色输出类似于 tput echo
- php - 在 Wordpress 中获取站点 URL
- excel - 在 VBA 中精确调整图表的大小
- intellij-plugin - 开发 IntelliJ 插件时如何导入 IntelliJ 类?
- python - 如何从 tf.data 打印数据集的一个示例?
- php - 如果有任何回声,脚本就会停止
- python - Django 阻止客户购买不同的付费会员,如果他们目前有一个
- xcode - 在 Swift5 中使用 SpriteKit 构建简单的 Pong。桨之间形成的有线尖刺
- sql - DB2、MariaDB、MongoDB 的评估工具