2016-11-11 20 views
1

iOSアプリケーションの場合、Objective-CコードをSwiftに変換しています。SwiftではどのようにAutoreleasingUnsafeMutablePointerを設定しますか?

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]; 

私はスウィフトにこれを変換しようとしていると私は私が考えますメソッド呼び出しが常に失敗するため、間違っています。

上記方法のスウィフトバージョン:私はそれを使用する方法

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

方法は二つの配列を移入することになっています。それはしません。私はここで何を逃したのですか?あなたは&NSArray?変数のアドレスを渡すことができますので、これは動作するはずタイプ

AutoreleasingUnsafeMutablePointer<NSArray?>? 

のパラメータに

答えて

4

var sourceMeshes: NSArray? 
metalMeshList = try MTKMesh.newMeshes(from:asset, device:device, 
             sourceMeshes: &sourceMeshes) 
関連する問題