模型I / O –如何使用`makeVerticesUniqueAndReturnError()`实例方法?

时间:2018-10-09 13:51:54

标签: swift scenekit augmented-reality arkit scenekit-modelio

实例方法makeVerticesUnique()修改了网格的顶点缓冲区,以使多个面不会共享任何顶点。但是在macOS 10.13 High Sierra和iOS 11中已弃用:

mdlMesh.makeVerticesUnique()            /* deprecated in macOS 10.13 and iOS 11 */

现在,开发人员必须使用新的实例方法:

func makeVerticesUniqueAndReturnError() throws

但未记录。 如何使用它?

enter image description here

当我使用这个新的实例方法时,Xcode给我一个错误:

'throws' may only occur before '->'

2 个答案:

答案 0 :(得分:1)

每当您在developer.apple.com或Xcode文档查看器中找不到文档时,请检查框架标头或Swift界面-这些标头通常具有至少可以用作粗糙文档形式的代码注释。

在Xcode中,使用“快速打开”(⌘⇧O)并输入相关标题的名称(MDLMesh.h)或其中的符号之一(MDLMesh, makeVerticesUnique, etc)。或⌘单击源中的这些符号之一,然后选择“跳转到定义”。 (如果那时候您遇到的是Objective-C标头,并且想要查看Swift版本,请从文件顶部的相关项目菜单中选择“生成的接口”。)

在这种情况下,您将看到这两种方法在用法上是等效的(但是新方法可以抛出错误):

/*!
 @method makeVerticesUnique:
 @abstract Deindexes the vertex array
 @discussion If any vertices are shared on multiple faces, duplicate those
             vertices so faces do not share vertices. The vertex buffer and index
             buffers on submeshes may grow to accomadate any vertices added.
 */
@available(OSX, introduced: 10.11, deprecated: 10.13)
open func makeVerticesUnique()


/*!
 @method makeVerticesUniqueAndReturnError:
 @abstract Deindexes the vertex array
 @discussion If any vertices are shared on multiple faces, duplicate those
 vertices so faces do not share vertices. The vertex buffer and index
 buffers on submeshes may grow to accomadate any vertices added.
 */
@available(OSX 10.13, *)
open func makeVerticesUniqueAndReturnError() throws

大概苹果公司认为原来的方法不能很好地处理故障(致命错误停止吗?崩溃?产生不良输出?不知道吗?),所以最好在出现问题时让呼叫者知道。

答案 1 :(得分:0)

这个新的instance methodtry!关键字完美搭配:

try! mdlMesh.makeVerticesUniqueAndReturnError()

在我的情况下,throwing方法不会在运行时抛出错误。因此,我可以在表达式之前编写try!以禁用错误传播,并将调用包装在不会引发任何错误的运行时断言中。如果实际抛出错误,我会收到运行时错误。