gpt4 book ai didi

ios - 尝试改变作为参数传递给异步函数的数组和对象

转载 作者:行者123 更新时间:2023-11-30 12:41:56 25 4
gpt4 key购买 nike

因此,如果您查看下面的代码,您将看到以下行失败:

cannot use mutating member on immutable value: 'forecasts' is a 'let' constant

forecasts.append(forecast)引起。我有一个名为 ForecastService 的服务文件,我正在使用该函数从 API 异步获取 View Controller 中的 JSON。我试图将一个对象和一个对象数组传递给函数,然后我想要对其进行变异,以便我可以使用 View Controller 中的更新值来更新我的 UI。我想构造预测对象并将它们插入我在 View Controller 中初始化的数组中。

任何关于如何解决这个问题的澄清都会很好。

import Foundation

import Alamofire

class ForecastService {

static let sharedInstance = ForecastService()

private init() {}

func downloadForecastDetails(forecast: Forecast, forecasts: [Forecast], completed: @escaping DownloadComplete) {
let url = URL(string: FORECAST_URL)!

Alamofire.request(url).responseJSON { response in
let result = response.result.value

if let dict = result as? Dictionary<String, AnyObject> {
if let list = dict["list"] as? [Dictionary<String, AnyObject>] {

for obj in list {
let forecast = Forecast(weather: obj)
forecasts.append(forecast)
}
}

}

completed()
}

}
}

最佳答案

问题不在于异步 block ,而在于参数预测的机制。当您调用该函数时,即使您将其声明为 var,它也会被复制。因为 Swift 中的 Array 是值类型,所以这是 Swift 的策略。 (https://developer.apple.com/swift/blog/?id=10)您可以尝试在异步 block 之外调用 forecasts.append ,它仍然会失败。因此,您需要另一种方法将引用类型(而不是值类型)传递到函数中。

关于ios - 尝试改变作为参数传递给异步函数的数组和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42128235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com