Как перевести float3 в SIMD3 <Float>(Xcode 11 Swift 5 с предупреждением об амортизации с помощью float3 и float4) - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь получить мой код для предупреждения бесплатно. Поскольку я только что обновил свой 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)
}

enter image description here

Это моя попытка перевести это ниже:

Код:

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>
    }
  }

enter image description here

1 Ответ

1 голос
/ 26 января 2020

Похоже, вы случайно расширяете SIMD4, когда вы действительно хотели расширить float4x4 (что, в отличие от float3 и float4, не устарело).

Кроме того, в вашем другом расширении это, вероятно, должно быть SIMD3<Scalar>, а не SIMD3<Float>, так что xyz вернет SIMD3, который имеет тот же тип Scalar, что и SIMD4, для которого он вызывается :

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)
    }
}
...