Swift Programming Beginner: почему в моем цикле возникает ошибка при реализации переменной? - PullRequest
0 голосов
/ 24 декабря 2018

Когда я пытаюсь запустить свой код на игровой площадке Xcode, я получаю предупреждение:

Переменная 'n' никогда не изменялась;рассмотрите возможность изменения константы 'let'.

Прежде всего, я изменяю переменную в теле цикла, так почему он говорит мне изменить ее на тип данных let (константа).

func multiples (n : Int) {
  var n = 1

  for _ in (3 ..< 1000) {

    var n = n + 1

    let multiple3 = 3 * n

    print(multiple3)
  }
}

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Это две разные переменные с именем n.Одна не изменяется, а одна создается для каждой новой итерации цикла for.
Причина, по которой вы можете иметь две переменные с одинаковыми именами, заключается в том, что они существуют в разных областях видимости, а одна внутри цикла for временно перекрывает ту, которая находится внецикл на время цикла, но только внутри него.

0 голосов
/ 24 декабря 2018

3 небольших заметки:

a) Если вы внимательно прочитаете сообщения из Xcode, вы поймете, как долго жизни и использование vars.( «Переменная 'n' никогда не была видоизменена; рассмотрите возможность изменения константы 'let'" )

b) у вас есть две переменные с одинаковыми именами в другой области действия

c) если вы введете «для», n слева будет вычислено с использованием N во внешней области видимости, поэтому внутреннее n всегда будет == 2

d) с использованием отладчика.на снимке.

enter image description here

0 голосов
/ 24 декабря 2018

Я изменяю переменную в теле цикла

Нет, это не так.Тот, что находится в теле цикла, отличается от n.

Чтобы исправить это, измените

var n = n + 1

на

n = n + 1
...