Модель ввода / вывода - Как использовать метод экземпляра `makeVerticesUniqueAndReturnError ()`? - PullRequest
0 голосов
/ 09 октября 2018

Метод экземпляра 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 голосов
/ 13 октября 2018

Этот новый instance method отлично работает с ключевым словом try!:

try! mdlMesh.makeVerticesUniqueAndReturnError()

В моем конкретном случае метод броска не выдаст ошибку во время выполнения.Таким образом, я могу написать try! перед выражением, чтобы отключить распространение ошибок и обернуть вызов в утверждение времени выполнения, что не будет выдано никакой ошибки.Если на самом деле выдается ошибка, я получу ошибку во время выполнения.

0 голосов
/ 10 октября 2018

Всякий раз, когда вы не можете найти документы на developer.apple.com или в средстве просмотра документации Xcode, проверьте заголовки фреймворка или интерфейс Swift - у них часто есть комментарии к коду, которые могут по крайней мере служить приблизительной формой документации.

В Xcode, используйте Open Quickly (⌘⇧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

Предположительно Apple определила, что оригинальный метод не обрабатывал сбои изящно (остановка с фатальной ошибкой)«сбой», выдающий плохой вывод (не знаю) и решил, что было бы лучше сообщить вызывающим абонентам, когда что-то пойдет не так.

...