如何将 float3 转换为 SIMD3<Float> (Xcode 11 Swift 5 对 float3 和 float4 给出折旧警告)

Hun*_*ter 7 floating-point xcode swift

我试图让我的代码没有警告。因为我刚刚更新了 Xcode,并且知道收到警告信号。我也尝试在下面解决这个问题。

这是给我警告的代码:

代码:

extension float4x4 {
var translation: float3 {
    return float3(columns.3.x, columns.3.y, columns.3.z)
}

init(translation vector: float3) {
    self.init(float4(1, 0, 0, 0),
              float4(0, 1, 0, 0),
              float4(0, 0, 1, 0),
              float4(vector.x, vector.y, vector.z, 1))
 }
}

extension float4 {
  var xyz: float3 {
    return float3(x, y, z)
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是我尝试翻译的内容如下:

代码:

extension SIMD4 {
var translation: SIMD3<Float> {
    return SIMD3(columns.3.x, columns.3.y, columns.3.z)
}

  init(translation vector: SIMD3<Float>) {
    self.init(SIMD4<Float>(1, 0, 0, 0),
              SIMD4<Float>(0, 1, 0, 0),
              SIMD4<Float>(0, 0, 1, 0),
              SIMD4(vector.x, vector.y, vector.z))
  }
}

  extension SIMD4 {
    var xyz: SIMD3<Float> {
      return SIMD3<Float>(x, y, z) as! SIMD3<Float>
    }
  }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

小智 6

基本上,我尝试过替换:

float3
Run Code Online (Sandbox Code Playgroud)

和:

SIMD3<Float>
Run Code Online (Sandbox Code Playgroud)

并且警告已经消失。


Tyl*_*ler 4

看起来您SIMD4在真正打算扩展时意外地进行了扩展float4x4(与float3和不同float4,它并未被弃用)。

另外,在您的其他扩展中,它可能应该是SIMD3<Scalar>,而不是SIMD3<Float>,这样xyz将返回与调用的任何类型SIMD3具有相同类型的 a :ScalarSIMD4

extension float4x4 {
    var translation: SIMD3<Float> {
        SIMD3(columns.3.x, columns.3.y, columns.3.z)
    }

    init(translation vector: SIMD3<Float>) {
        self.init(.init(1, 0, 0, 0),
                  .init(0, 1, 0, 0),
                  .init(0, 0, 1, 0),
                  .init(vector.x, vector.y, vector.z, 1))
    }
}

extension SIMD4 {
    var xyz: SIMD3<Scalar> {
        SIMD3(x, y, z)
    }
}
Run Code Online (Sandbox Code Playgroud)