gpt4 book ai didi

swift - 我的结构从 JSON 初始化为 nil 但后来需要添加值

转载 作者:行者123 更新时间:2023-11-30 10:49:34 26 4
gpt4 key购买 nike

我使用以下结构来读取 JSON。

struct ConsumedRecipe: Codable {

var name: String
var userStats: Stats?
var globalStats: Stats?

struct Stats: Codable {
var rating: Double?
var time: TimeInterval?
}


init(name: String, userStats: Stats, globalStats: Stats) {
self.name = name
self.userStats = userStats
self.globalStats = globalStats
}

}

假设 globalStats 有读入的值,但 userStats 没有。所以它们为零。

在应用程序执行中,我获得了 userStats. rating 的值。如果我尝试直接分配评级,它仍然为零。

例如:

userStats.rating = 2.0 remains nil.

我假设这与整个统计子结构(我不确定正确的术语是什么)为零有关。所以我尝试添加以下中间步骤。

 var tempStats: Stats! = Stats()
tempStats.rating = 2.0

userStats? = tempStats

这仍然使 userStats. rating 的值保持为零。

我在这里缺少什么?我是否正确,这是一些初始化问题?

其他信息:

我认为我的问题可能与从 JSON 初始化的初始化代码有关:以下:

  init?(json: Data) // take some JSON and try to init a ConsumedRecipe from it
{
do {
let newValue = try JSONDecoder().decode(ConsumedRecipe.self, from: json)
self = newValue
} catch let error as NSError {
print("Reading Recipe Failed: \(error)")
return nil
}
}

这意味着我稍后无法使用该部分(userStats)?

最佳答案

通过应用程序执行,我的意思是用户正在使用评级控件来给出一个值。我通过中断执行和检查看到它为空。

我用一种相当不优雅的方式解决了这个问题。但相信我明白原因。我允许 Swift 读取 JSON 文件,如上面的“init?(json: Data)”。这很有效,因为实际上 JSON 文件的一些详细信息未包含在上面的示例中。这样可以节省编写完整的 JSON 逻辑——特别是处理空值。但是,空值可能会使读取崩溃。因此,用户评分(将为空)不在 JSON 文件中。因此 Stats 结构在读取时未初始化。显然也不能在以后需要时对其进行初始化。 (用户给出评分反馈后。)

我的解决方案是在结构中添加一个非可选属性“code”,如下所示:

  struct Stats: Codable {
var code: String
var rating: Double?
var time: TimeInterval?
}

然后在 JSON 中添加:

   "userStats": {
"code": "user"
},

我目前不使用属性代码,但我的 userStats 结构已初始化,评级为零。然后我可以在需要时添加评级值。

关于swift - 我的结构从 JSON 初始化为 nil 但后来需要添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54952711/

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