Нельзя использовать мутирующий член для неизменного значения: ошибка в Swift - PullRequest
0 голосов
/ 13 апреля 2020

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

Тем не менее, я получаю сообщение об ошибке: «Невозможно использовать мутирующий член в неизменяемом значении: list - это константа let». Почему list является постоянным значением? Не уверен, что это уместно, но я объявил массив quarantineStuff как переменную. Почему list принимает константу по умолчанию?

var quarantineStuff: [String] = ["zero to one book", "proper twelve whiskey", "coffee", "tonic water", "toilet roll", "broken electronics"]

func removeItemsICantTakeWithMe(list: [String]) -> [String] {
    if let index = list.firstIndex(of: "toilet roll") {
        list.remove(at: index)
    }
    return list
}

let renewedList = removeItemsICantTakeWithMe(list: quarantineStuff)
print(renewedList)

Ответы [ 2 ]

3 голосов
/ 13 апреля 2020

Все параметры в Swift неявно let / константы.

Если вам нужно изменить параметр, вам нужно сделать его var явно в вашем коде:

func removeItemsICantTakeWithMe(list: [String]) -> [String] {
    var list = list // insert this line
    if let index = list.firstIndex(of: "toilet roll") {
        list.remove(at: index)
    }
    return list
}

В качестве альтернативы, вы можете использовать inout параметры для достижения аналогичного эффекта.

3 голосов
/ 13 апреля 2020
var quarantineStuff: [String] = ["zero to one book", "proper twelve whiskey", 
"coffee", "tonic water", "toilet roll", "broken electronics"]

func removeItemsICantTakeWithMe(list: [String]) -> [String] {
    var aList = list // method object is immutable so we have to make a mutable object         

    if let index = aList.firstIndex(of: "toilet roll") {
        aList.remove(at: index)
    }
    return aList
}

let renewedList = removeItemsICantTakeWithMe(list: quarantineStuff)
print(renewedList)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...