Модель ввода / вывода - Как использовать метод экземпляра `makeVerticesUniqueAndReturnError()`?
Метод экземпляра makeVerticesUnique()
изменил буферы вершин меша так, чтобы вершины не были разделены несколькими гранями. Но это устарело в macOS 10.13 High Sierra и в iOS 11:
mdlMesh.makeVerticesUnique() /* deprecated in macOS 10.13 and iOS 11 */
Теперь разработчики должны использовать новый метод экземпляра:
func makeVerticesUniqueAndReturnError() throws
Но это не задокументировано. Как это использовать?
Когда я использую этот новый метод экземпляра, Xcode выдает мне ошибку:
'throws' may only occur before '->'
2 ответа
Всякий раз, когда вы не можете найти документы на 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 определила, что оригинальный метод не обрабатывает сбои изящно (фатальная ошибка останавливает "сбой" приводит к неправильному выводу "), и решила, что было бы лучше сообщить вызывающим абонентам, когда что-то пойдет не так.
Это новый instance method
отлично работает с try!
ключевое слово:
try! mdlMesh.makeVerticesUniqueAndReturnError()
В моем конкретном случае метод throwing не выдаст ошибку во время выполнения. Так что я могу написать try!
перед выражением отключить распространение ошибок и обернуть вызов в утверждение времени выполнения, что не будет выдано никакой ошибки. Если на самом деле выдается ошибка, я получу ошибку во время выполнения.