изменение значения свойства в массиве - PullRequest
0 голосов
/ 28 мая 2019

когда я пытаюсь присвоить новое значение свойству массива, я получаю сообщение об ошибке: Невозможно присвоить свойству: 'color' является константой 'let'

struct car {
    let model: String
    let color: String
}

var myCars :[car] = [
    car(name:"model X", color: "black"),
    car(name:"model Y", color: "blue"),
    car(name:"roadster", color: "red"),
    car(name:"model S", color: "black"),
    car(name:"model 3", color: "black")
]

let colorFilter = dataSource.items.index(where: {$0.color == "black"})
myCars[colorFilter].color = "grey"

заменить все элементы со свойством color, установленным на "black", на "grey"

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Поскольку color является constant (let) property, то есть один раз initialised, вы не можете изменить его значение.Если вы хотите изменить значение color, сделайте его var вместо let

struct car {
    let model: String
    var color: String
}

Чтобы обновить color всех cars из black to grey, используйте map(_:) на myCars массив.

myCars = myCars.map {
    var newCar = $0
    if newCar.color == "black" {
        newCar.color = "grey"
    }
    return newCar
}

Выход:

print(myCars)

// [car(model: "model X", color: "grey"), car(model: "model Y", color: "blue"), car(model: "roadster", color: "red"), car(model: "model S", color: "grey"), car(model: "model 3", color: "grey")]
0 голосов
/ 28 мая 2019

В структуре вашего автомобиля вы определили цвет с помощью let, поэтому он является константой.Измените его на var, если вы хотите, чтобы он был переменным.

struct car {
    let model: String
    var color: String
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...