gpt4 book ai didi

ios - 将项目附加到数组会覆盖以前的项目并添加新项目

转载 作者:行者123 更新时间:2023-11-28 12:18:56 24 4
gpt4 key购买 nike

我在将项目附加到数组时遇到问题。我正在使用 Alamofire 和 Open Weather API 来获取这些项目。

获取 JSON 响应并解析它不是问题。将第一项添加到数组中也可以正常工作。

项目示例:

Date : Monday
High Temp : 85F
Low Temp : 72F
Weather Type : Rain

Date : Tuesday
High Temp : 102F
Low Temp : 97F
Weather Type : Sunny

Date : Wednesday
High Temp : 98F
Low Temp : 62F
Weather Type : Rain

Date : Thursday
High Temp : 95F
Low Temp : 92F
Weather Type : Cloudy

Date : Friday
High Temp : 83F
Low Temp : 77F
Weather Type : Sunny

Date : Saturday
High Temp : 100F
Low Temp : 85F
Weather Type : Sunny

这些存储在 WeatherForecast 对象中,该对象又被添加/附加到 WeatherForecasts 数组。

问题是最终发生的是在这种情况下的最后一个值Saturday 最终填满了数组中的所有六个元素。

使用 for 循环我注意到它是这样进行的。

正确添加第一项,然后添加第二项两次覆盖第一项。然后第三项覆盖第一和第二项……重复直到结束。

使用数字会发生什么:1个22333444455555666666 <- 最终结果,最后一个元素重复 6 次。

我想要什么:123456

我的代码如下:

class WeatherService
{
private var weatherForecasts: [WeatherForecast] = [WeatherForecast]();
private var weatherForecast: WeatherForecast = WeatherForecast();
private var arrayOfInts: [Int] = [Int]();
private var counter: Int = 0;

public func downloadWeatherForecast(getForecastURL: String,
completed: @escaping(_ weatherPayload: WeatherPayload) -> Void)
{
Alamofire.request(getForecastURL)
.responseJSON
{
response in

let result = response.result;

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

for dictItem in list
{
if let temp = dictItem["temp"] as? Dictionary<String, Double>
{

if let maxTemp = temp["max"]
{
self.weatherForecast.setHighTemp(highTemp: self.convertToString(temp: maxTemp));
}

if let minTemp = temp["min"]
{
self.weatherForecast.setLowTemp(lowTemp: self.convertToString(temp: minTemp));
}
}

if let weatherArray = dictItem["weather"] as?
[Dictionary<String, AnyObject>]
{
if let main = weatherArray[0]["main"] as? String
{
self.weatherForecast.setWeatherType(weatherType: main.capitalized);
}
}

if let date = dictItem["dt"] as? Double
{
let convertedDate = Date(timeIntervalSince1970: date);
self.weatherForecast.setDate(date: convertedDate.dayOfWeek()!);
}

self.counter += 1;
self.arrayOfInts.append(self.counter);
self.weatherForecasts.append(self.weatherForecast);
}

//Array of ints works fine.
for integer in self.arrayOfInts
{
print("Int val is : \(integer)");
}
}
completed(self.retrievalSuccess(weatherForecasts: self.weatherForecasts));
}
else
{
completed(self.retrievalFailure(message: "Six day forecast error."));
}
}
}
}

我尝试使用 arrayOfInts 附加,它工作正常,没有覆盖,这让我对我的 WeatherForecasts 数组有什么问题感到困惑。

最佳答案

问题是 weatherForecast 被多次添加到您的数组中。假设您的天气预报名称是“X”您的代码执行此操作:

第一次迭代:

X.day = "Monday"
forecasts.add(X)
//forecasts is now [X]

然后如果您打印所有预测日期,它将打印“星期一”

第二次迭代:

X.day = "Tuesday"
forecasts.add(X)
//forecasts is now [X,X]

第三次迭代:

X.day = "Wednesday"
forecasts.add(X)
//forecasts is now [X,X,X]

如果您打印所有预测日期..它将打印“星期三,星期三,星期三”

发生这种情况是因为您正在引用同一个对象并对其进行更新..您需要做的是在每次迭代时创建一个新对象,以便您的数组看起来像这个 [X,Y,Z] 而不是 [X,X,X]

尝试更改这部分代码:

for dictItem in list {

为此:

for dictItem in list {
weatherForecast = WeatherForecast()

关于ios - 将项目附加到数组会覆盖以前的项目并添加新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45469880/

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