Swift MetalKit неизвестного типа возврата MTKMesh.newMeshes - PullRequest
0 голосов
/ 08 мая 2018

До сих пор я следовал учебному пособию (выпущенному во времена Металла 1), чтобы выучить Металл. Я не сталкивался ни с какими ошибками, которые я не мог понять до этого момента. Я пытаюсь выполнить этот код

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 сообщает мне, что это приведение завершится неудачей каждый раз.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Возвращаемым типом этого метода является ([MDLMesh], [MTKMesh]), кортеж, состоящий из массива MTLMesh es и массива MTKMesh es. Причиной этого является то, что вам может потребоваться оригинальная коллекция MDLMesh объектов, содержащихся в активе, в дополнение к MTKMesh объектам, созданным для вас.

Итак, вы можете объявить meshes так:

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

Или, если вас не волнуют исходные MDLMesh es, вы можете «деструктурировать» кортеж, чтобы получить только интересующую вас часть в переменную типа [MTKMesh]:

var meshes: [MTKMesh]
(_, meshes) = try MTKMesh.newMeshes(asset: asset, device: device)
0 голосов
/ 08 мая 2018

Как видно из сигнатуры функции и ошибки компилятора, тип возвращаемого значения (modelIOMeshes: [MDLMesh], metalKitMeshes: [MTKMesh]), поэтому вы должны объявить meshas соответственно:

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

Тип - это именованный кортеж, содержащий два Array s, содержащие MDLMesh и MTKMesh экземпляров соответственно.

...