【问题标题】:In Swift how do I configure a AutoreleasingUnsafeMutablePointer?在 Swift 中,如何配置 AutoreleasingUnsafeMutablePointer?
【发布时间】:2017-03-26 05:15:37
【问题描述】:

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

该方法应该填充两个数组。它不这样做。我在这里错过了什么?

【问题讨论】:

    标签: objective-c swift scenekit metal modelio


    【解决方案1】:

    到一个类型的参数

    AutoreleasingUnsafeMutablePointer<NSArray?>?
    

    您可以使用&amp; 传递NSArray? 变量的地址,所以应该可以:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 2014-12-11
      • 2020-05-26
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多