Инициализировать и сохранить N экземпляров объекта в массиве констант let? - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу инициализировать и сохранить N копий одного и того же объекта в неизменяемом массиве, чтобы длина массива не могла измениться и объекты не могли быть перезаписаны.

Я попытался использовать функцию init(repeating:count:) для Array, но создается массив с count ссылками на аргумент repeating, если аргумент repeating не является примитивом.

Приведенный ниже код игровой площадки иллюстрирует проблему:

class Thing { }

let tenThings : [Thing] = Array(repeating: Thing(), count: 10)

if (tenThings[0] === tenThings[1]) {
    print("tenThings stores 10 references to the same Thing.")
} else {
    print("tenThings stores 10 references to 10 different Things")
}
> tenThings stores 10 references to the same Thing.

Я хочу, чтобы tenThings сохранил тот же результат, что и этот:

let tenMoreThings: [Thing] = [Thing(), Thing(), Thing(), Thing(), Thing(), Thing(), Thing(), Thing(), Thing(), Thing()]

Я думаю, я мог бы добавить к временному массиву цикл и назначить его дляпусть константный массив, но я надеюсь на более чистое решение.

1 Ответ

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

Как это?:

class Thing { }

let tenThings : [Thing] = (0..<10).map{_ in Thing()}
...