如何将float3转换为SIMD3<;浮动>;(Xcode 11 Swift 5使用浮动3和浮动4发出折旧警告)

如何将float3转换为SIMD3<;浮动>;(Xcode 11 Swift 5使用浮动3和浮动4发出折旧警告),swift,xcode,floating-point,Swift,Xcode,Floating Point,我正试图让我的代码是免费的警告。因为我刚刚更新了我的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),

我正试图让我的代码是免费的警告。因为我刚刚更新了我的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)
}
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>
    }
  }

以下是我试图翻译的内容:

代码:

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)
}
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>
    }
  }
扩展SIMD4{ var转换:SIMD3{ 返回SIMD3(第3.x列、第3.y列、第3.z列) } init(翻译向量:SIMD3){ self.init(SIMD4(1,0,0,0), SIMD4(0,1,0,0), SIMD4(0,0,1,0), SIMD4(向量x,向量y,向量z)) } } 扩展SIMD4{ 变量xyz:SIMD3{ 将SIMD3(x,y,z)返回为!SIMD3 } }

看起来您是无意中扩展了
SIMD4
,而实际上您是想扩展
float4x4
(与
float3
float4
不同,float4x4并没有被弃用)

另外,在另一个扩展中,它可能应该是
SIMD3
,而不是
SIMD3
,这样
xyz
将返回一个
SIMD3
,该
SIMD3
与调用它的
SIMD4
类型相同:

extension float4x4{
var转换:SIMD3{
SIMD3(第3.x列、第3.y列、第3.z列)
}
init(翻译向量:SIMD3){
self.init(.init(1,0,0,0),
.init(0,1,0,0),
.init(0,0,1,0),
.init(向量x,向量y,向量z,1))
}
}
扩展SIMD4{
变量xyz:SIMD3{
SIMD3(x,y,z)
}
}

基本上,我只是尝试替换:

float3
与:

SIMD3

警告已经消失了

Swift是一种类型推断语言。您可以简单地使用
.init(…)
而不是重复
SIMD4(…)
扩展float4x4{var translation:SIMD3{.init(columns.3.x,columns.3.y,columns.3.z)}init(translation vector:SIMD3){self.init(.init(1,0,0,0),.init(0,0,1,0),.init(vector.x,vector.y,vector.z),init}扩展名SIMD4{var xyz:SIMD3{.init(x,y,z)}}是的,自从这篇文章创建以来,苹果已经更新了它们的向量类型
Float3
已被弃用并与
SIMD3
关联,而
Float4
已被弃用并替换为
SIMD4
。(表决)