Оба оригинальных ответа на этот вопрос являются удовлетворительными, но приходят к решению немного по-разному. Я выбрал тот, который мне показался более простым для реализации
Я пытаюсь перевести некоторые ObjectiveC, из этого документа / примера о металле Apple , и металлический код в swift, но у меня возникли проблемы с этим битом:
вот используемая мной typedef, которая необходима для того, чтобы металлические шейдеры могли контролировать мои данные вершин (векторы с плавающей точкой из simd.h значимы):
#include <simd/simd.h>
typedef struct
{
vector_float2 position;
vector_float4 color;
} AAPLVertex;
В цели C вы можете просто сделать это, чтобы привести некоторые данные к этому типу:
static const AAPLVertex triangleVertices[] =
{
// 2D positions, RGBA colors
{ { 250, -250 }, { 1, 1, 1, 1 } },
{ { -250, -250 }, { 1, 1, 0, 1 } },
{ { 0, 250 }, { 0, 1, 1, 1 } },
};
Но как вы это делаете в Swift? Я пытался это:
private let triangleVertices = [
( (250, -250), (1, 0, 1, 1) ),
( (-250, -250), (1, 1, 0, 1) ),
( (0, 250), (0, 1, 1, 1) )
] as? [AAPLVertex]
но xcode говорит мне:
Cast from '[((Int, Int), (Int, Int, Int, Int))]' to unrelated type '[AAPLVertex]' always fails
и мое приложение падает при загрузке.