0

我在一个类的 ContentView 中创建一个对象并将其传递给一个函数

@StateObject var portfolio = Portfolio()

...

///Cannot pass immutable value as inout argument: 'portfolio' is a get-only property
setCoin(portfolio: &portfolio, currencyList: currencyList, currency: currency, quantity: quantity)

...

func setCoin(portfolio:inout Portfolio, currencyList: [String : Int], currency: String, quantity: String){

    for coin in portfolio.coins{
        if coin.name == currency{
            //Cannot assign to property: 'coin' is a 'let' constant
            coin.quantity = Double(quantity)
            portfolio.portfolioList.append(coin)
        }
    }
}

portfolio.coins 是从 JSON 解码中获得的对象数组。我正在尝试添加一个数量变量,该变量是用户输入以在视图中使用。

4

1 回答 1

0

Portfolio引用类型。并且inout适用于类型。

只需通过参考

func setCoin(portfolio: Portfolio, currencyList: [String : Int], currency: String, quantity: String){

编辑:要修改coins显然是值类型的数组,您必须enumerated()直接通过索引使用和修改数组中的项目

for (index, coin) in portfolio.coins.enumerated() {
    if coin.name == currency {
        portfolio.coins[index].quantity = Double(quantity)
        portfolio.portfolioList.append(portfolio.coins[index])
    }
}

我强烈建议将循环中的最后一行——实际上是整个逻辑——移动到模型中

于 2022-02-15T11:17:59.670 回答