我有这个简单的结构。

struct Section {
    let store: Store
    var offers: [Offer]
}

在VC中,我在顶部声明了这些Section的数组,就像fileprivate var sections: [Section] = []一样。然后在Section中添加一些viewDidLoad()对象。

稍后,我需要从Offer中的offers数组中删除一些Section对象。

我遍历sections数组以查找包含需要删除的SectionOffer
for section in sections {
    if let i = section.offers.index(where: { $0.id == offer.id }) {
        section.offers.remove(at: i) // Cannot use mutating member on immutable value: 'section' is a 'let' constant
    }
}

但是,当我尝试从Offer数组中删除特定的offers时,出现错误不能对不可变值使用变异成员:'section'是一个'let'常量

我该如何解决?

最佳答案

默认情况下,在for中定义的变量是let,无法更改。因此,您必须将其设置为var.更简单的解决方案:

for var section in sections {
    if let i = section.offers.index(where: { $0.id == offer.id }) {
        section.offers.remove(at: i)
    }
}

关于ios - 修改结构时无法在不可变值错误时使用变异成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45410907/

10-14 22:28