Инициализация двухмерных пользовательских массивов в Swift - PullRequest
0 голосов
/ 11 февраля 2019

Я очень новичок в Swift, и эта проблема поставила меня в тупик.Я пытаюсь создать двухмерную карту.В начале моего класса Map мне нужно создать двумерный массив другого класса с именем Grid.

Это то, что у меня есть сейчас:

class Map: NSObject {
    var squares: [[Grid]]
    let MAXROWS = 200
    let MAXCOLUMNS = 200

    override init(){
         for r in 0...MAXROWS{
             for c in 0...MAXCOLUMNS{
                squares[r][c].append
            }
        }
    }

В функции добавления,это создает ошибку:

значение типа "Сетка" не имеет члена "добавление"

Как мне сделать это правильно?

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Вы также можете сделать это следующим образом (потому что Grid является классом):

squares = (0..<MAXROWS).map{_ in (0..<MAXCOLUMNS).map{_ in Grid()}}

Это использует диапазоны в качестве средства для «генерации» нужного количества элементов в массиве.Функция map () возвращает запись для каждого сгенерированного числа.Записи для строк - это массивы столбцов, каждый из которых содержит новый экземпляр объекта Grid.«_ In» внутри замыканий map () говорит компилятору, что мы на самом деле не используем значение, полученное диапазонами.

0 голосов
/ 12 февраля 2019

попробуйте:

class Map: NSObject {
var squares: [[Grid]]
let MAXROWS = 200
let MAXCOLUMNS = 200

override init(){
     for r in 0...MAXROWS{
        squares.append([])
         for c in 0...MAXCOLUMNS{
            squares[r].append(Grid())
        }
    }
}
0 голосов
/ 11 февраля 2019

Или, если вам не нравятся необработанные циклы:

override init(){
    self.squares = Array<[Grid]>(
        repeating: Array<Grid>(
            repeating: Grid(),
            count: MAXCOLUMNS),
        count: MAXROWS
    )
}

edit: Как и Alain T metnioned, это работает, только если Grid является структурой, в противном случае тот же самый экземпляр будет использоваться на протяжении 2dмассив.Это потому, что классы передаются по ссылке, и в этом случае одна и та же ссылка будет использоваться каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...