【问题标题】:changing a property value in an array更改数组中的属性值
【发布时间】:2019-05-28 17:24:22
【问题描述】:

当我尝试为数组属性分配一个新值时,我得到了错误: 无法分配给属性:“颜色”是“让”常量

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"

将所有颜色属性设置为“黑色”的项目替换为“灰色”

【问题讨论】:

  • 然后将属性声明为var,var color: String

标签: swift


【解决方案1】:

由于color 是constant (let) property,即一旦initialised 您无法更改其值。如果您想修改color 的值,请将其改为var 而不是let

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

要从black to grey 更新所有cars 中的color,请在myCars 数组上使用map(_:)。

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")]

【讨论】:

  • 如何删除所有颜色属性设置为“黑色”的项目
【解决方案2】:

在您的汽车结构中,您使用 let 定义了颜色,因此它是一个常量。如果您希望它是可变的,请将其更改为 var。

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

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 2021-11-24
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多