не может назначить через индекс в Swift - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь реализовать общий алгоритм в Swift.

Несмотря на то, что я не определил числа как переменную let, но я получаю следующую ошибку:

невозможно назначить черезнижний индекс: 'numbers' - это постоянные числа 'let' [i] = maxNumber

Моя реализация выглядит следующим образом:

func InsertionSort (numbers : [Int]) -> [Int]
{
    var maxNumber  = 0
    var j = 0
    var size = numbers.count-1

    for (i,number) in numbers.enumerated()
    {
        j = i + 1
        for index in j...size
        {
            if numbers[index] > number
            {
                maxNumber = numbers[index]
                numbers[index] = numbers[i]
                // error is thrown in the following line
                numbers[i] = maxNumber
            }
        }
    }

    return numbers
}

1 Ответ

0 голосов
/ 16 октября 2018

Параметры являются неизменяемыми по умолчанию.Чтобы сделать параметр изменяемым, вам нужно добавить модификатор inout.

Однако, увидев, что ваш метод возвращает массив, вы, вероятно, не хотите, чтобы параметр был изменен какЧто ж.Вместо этого вы должны сделать копию параметра, изменить его и вернуть копию:

func InsertionSort (numbers : [Int]) -> [Int]
{
    var maxNumber  = 0
    var j = 0
    let size = numbers.count-1
    var numbersCopy = numbers // <------ note this line

    for (i,number) in numbers.enumerated()
    {
        j = i + 1
        for index in j...size
        {
            if numbers[index] > number
            {
                maxNumber = numbers[index]

                // note how I modified the copy here
                numbersCopy[index] = numbers[i]
                numbersCopy[i] = maxNumber
            }
        }
    }

    return numbersCopy
}
...