2016-11-11 8 views
1

iOS 앱의 경우 일부 Objective-C 코드를 Swift로 변환 중입니다.Swift에서 AutoreleasingUnsafeMutablePointer를 어떻게 구성합니까?

다음
+ (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]; 

내가 스위프트이 변환하려고 나는 내가 생각

목적-C 코드는이 서명하는 방법을 사용합니다 메서드 호출이 항상 실패하기 때문에 잘못하고있다.

위의 방법의 스위프트 버전 :

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

방법은 두 배열을 채울 예정이다. 그것은 그렇게하지 않습니다. 나는 무엇을 여기에서 놓쳤 느냐?

답변

4
당신이 &NSArray? 변수의 주소를 전달할 수

AutoreleasingUnsafeMutablePointer<NSArray?>? 

유형의 매개 변수

, 그래서 이것은 작동합니다 :

var sourceMeshes: NSArray? 
metalMeshList = try MTKMesh.newMeshes(from:asset, device:device, 
             sourceMeshes: &sourceMeshes)