1

iOS アプリの場合、いくつかの Objective-C コードを Swift に変換しています。

Objective-C コードは、次のシグネチャを持つメソッドを使用します。

+ (nullable NSArray<MTKMesh*>*)newMeshesFromAsset:(nonnull MDLAsset *)asset
       device:(nonnull id<MTLDevice>)device
 sourceMeshes:(NSArray<MDLMesh*>* __nullable * __nullable)sourceMeshes
        error:(NSError * __nullable * __nullable)error;

呼び方は次のとおりです。

NSArray<MTKMesh *> *mtkMeshes;
NSArray<MDLMesh *> *mdlMeshes;

mtkMeshes = [MTKMesh newMeshesFromAsset:asset
                                 device:_device
                           sourceMeshes:&mdlMeshes
                                  error:&error];

これを Swift に変換しようとしていますが、メソッド呼び出しが常に失敗するため、間違っていると思います。

上記のメソッドの Swift バージョン:

open class func newMeshes(from asset: MDLAsset, device: MTLDevice, sourceMeshes: AutoreleasingUnsafeMutablePointer<NSArray?>?) throws -> [MTKMesh]

使い方:

do {

    var myPointer: AutoreleasingUnsafeMutablePointer<NSArray?>? = nil
    myPointer = AutoreleasingUnsafeMutablePointer<NSArray?>.init(&modelIOMeshList)

    metalMeshList = try MTKMesh.newMeshes(from:asset, device:device, sourceMeshes: myPointer)

} catch {
    fatalError("Error: Can not create Metal mesh from Model I/O asset")
}

このメソッドは、2 つの配列に値を設定することになっています。それはしません。ここで何を見逃したのですか?

4

1 に答える 1