2

到目前为止,我一直在关注一个教程(大约在 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]?'

什么是 type of MTKMesh.newMeshes,如何将其存储在变量中?我尝试投射它as! [AnyObject],但后来 xcode 告诉我这个投射每次都会失败。

4

2 回答 2

3

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

所以,你可以meshes这样声明:

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

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

var meshes: [MTKMesh]
(_, meshes) = try MTKMesh.newMeshes(asset: asset, device: device)
于 2018-05-08T03:28:15.743 回答
1

正如函数签名和编译器错误清楚地表明,返回类型是(modelIOMeshes: [MDLMesh], metalKitMeshes: [MTKMesh]),所以你应该meshas相应地声明:

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

该类型是一个命名元组,包含两个Arrays,分别是holdingMDLMeshMTKMeshinstances。

于 2018-05-08T00:40:21.790 回答