Swift MetalKit 未知 return 类型 MTKMesh.newMeshes

Swift MetalKit unknknown return type MTKMesh.newMeshes

到目前为止,我一直在按照教程(大约在 Metal 1 发布时发布)来学习 Metal。到目前为止,我还没有遇到任何我无法弄清楚的错误。我正在尝试执行此代码

var meshes: [AnyObject]?
//code
let device = MTLDevice() //device is fine
let asset = MDLAsset() //asset works fine
do{
    meshes = try MTKMesh.newMeshes(asset: asset, device: device)
} catch //...

我得到的错误是 Cannot assign value of type '(modellOMeshes: [MDLMesh], metalKitMeshes: [MTKMesh])' to type '[AnyObject]?'

MTKMesh.newMeshes 的类型是什么?如何将其存储在变量中?我试着投射它 as! [AnyObject],但是 xcode 告诉我每次投射都会失败。

正如函数签名和编译器错误清楚显示的那样,return 类型是 (modelIOMeshes: [MDLMesh], metalKitMeshes: [MTKMesh]),因此您应该相应地声明 meshas

var meshes: (modelIOMeshes: [MDLMesh], metalKitMeshes: [MTKMesh])?

该类型是一个包含两个 Array 的命名元组,分别包含 MDLMeshMTKMesh 个实例。

那个方法的return类型是([MDLMesh], [MTKMesh]),一个由MTLMeshes数组和MTKMeshes数组组成的元组。这样做的原因是,除了为您创建的 MTKMesh 个对象之外,您可能还需要资产中包含 MDLMesh 个对象的原始集合。

因此,您可以这样声明 meshes

var meshes: ([MDLMesh], [MTKMesh])

或者,如果您不关心原始的 MDLMeshes,您可以 "destructure" 元组将您关心的部分放入 [MTKMesh] 类型的变量中:

var meshes: [MTKMesh]
(_, meshes) = try MTKMesh.newMeshes(asset: asset, device: device)