добро пожаловать в StackOverflow. Здесь есть несколько проблем, я постараюсь решить их все:
Нет двухмерных массивов
Технически , Swift не имеет двухмерных массивов (пока вы не реализуете один, то есть). То, что вы описываете - это вложенные массивы, которые имеют немного отличающиеся характеристики:
- Нет гарантии, что в таком массиве строки одинакового размера. Первый может иметь ширину 160, второй может быть пустым.
Он имеет худшие характеристики производительности, поскольку представляет собой массив массивов, а не один непрерывный массив, содержащий все элементы. То есть он хранится ...
больше похоже на:
чем как:
Что должен делать ViewController
Он должен контролировать взгляды. Хранение матрицы 160x128 для меня не похоже на «управление видом», и поэтому совершенно неуместно, чтобы такой код помещался туда
Компиляция больших выражений
Без подсказок типа средство проверки типа Swift оставлено для вывода типов в игре в нашем коде. Например, хотя [[1, 2, 3], [4, 5, 6]]
может выглядеть как Array<Array<Int>>
, на самом деле его можно использовать для инициализации ArraySlice<Set<Double>>
, если этого требует контекст.
В Swift буквенные выражения могут иметь одно многих типов. Синтаксис в квадратных скобках, используемый для массива, может фактически использоваться для инициализации любого типа, соответствующего ExpressibleByArrayLiteral
(например, Set
, ArraySlice
или любых таких типов, которые вы изобрели сами). Аналогично, целочисленные литералы можно использовать для инициализации любого типа, соответствующего ExpressibleByIntegerLiteral
, например Float
, Double
и каждого варианта (U)Int(64|32|16|8)
. Взятые вместе, у литерала массива есть много возможных типов, которые могут быть, что очень долго оценивает проверку типов.
Вы можете помочь в этом, полностью указав тип (например, подсказка типа для переменной: let matrix: [[Double]] = [ ... ]
. Но даже если эти данные слишком велики, чтобы их можно было поместить в файл Swift.
Использование формата сериализации
.. Это правильный путь к go. В этом случае, я думаю, что CSV, вероятно, является наиболее подходящим (он действительно хорош для хранения данных в виде квадратной таблицы) "и" CSV "форматы файлов" (я не знаю, что здесь означает "проверено") и что "один из тех, кто работал для меня" (не работал для вы ? что это значит, в коде есть некоторая проверка if (user == Serhat) dontWork()
?). Это правильный подход для хорошего решения. Если вы застряли там, вы должны опубликовать вопрос, который дает более подробную информацию о том, что именно пошло не так, чтобы другие могли реально помочь вам.