Заполнение массива в Swift 4 циклом for без использования индекса - PullRequest
0 голосов
/ 29 апреля 2018

Мне нужно заполнить массив (уже объявленный и инициализированный) с помощью цикла for, чтобы создать определенное количество элементов.

Я получил следующий код:

    func createValues() -> Array<Int> {

        let usableRange:Range = 6..<11;

        var arrayOfValues: Array<Int>=[]; //Array declared and initialized

        for i in 0..<10 {

            arrayOfValues.append(random(usableRange));

            print(arrayOfValues[i]);

        }

        return arrayOfValues;
    }

этот код делает то, что я ожидаю, он будет делать нормально. Однако, как только я закомментирую строку

 print(arrayOfValues[i]);

Xcode выдает следующее предупреждение:

Неизменное значение «i» никогда не использовалось; рассмотрите возможность замены на '_' или удаляя его

Если я приму предложение, код работает, но не так хорошо, как раньше.

Я просто перехожу из Obj-C в Swift, и я действительно не знаю, каким должен быть правильный способ сделать это. Любая помощь будет оценена. Заранее спасибо.

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

Ответы [ 4 ]

0 голосов
/ 29 апреля 2018

Array имеет назначенный инициализатор, который инициализирует массив с заданным размером и повторяющимся значением:

let values = Array(repeating: "VALUE", count: 5)
print(fiveZs)
// Prints "["VALUE", "VALUE", "VALUE", "VALUE", "VALUE"]"

Источник: Документация Apple

0 голосов
/ 29 апреля 2018

Так как вы не используете i, вы можете просто написать

for _ in 0 ..< 10

_ означает «да, есть значение, но мне все равно», здесь и во многих других ситуациях.

0 голосов
/ 29 апреля 2018

Если целью является создание массива случайных чисел в заданном диапазоне, я бы посоветовал вам просто сгенерировать его напрямую. Нет необходимости в петле for.

let usableRange = UInt32(6)..<UInt32(11)
let arr = (0..<10).map { _ in Int(
    arc4random_uniform(usableRange.upperBound - usableRange.lowerBound) 
    + usableRange.lowerBound
)}
0 голосов
/ 29 апреля 2018

Если вы хотите просто хорошую альтернативу для своего кода, я предлагаю вам следующее:

var i: Int = 0

while i < 10 {

  arrayOfValues.append(random(usableRange))
  i += 1

}
...