SWIFT 仍在努力为 class 中的嵌套数组赋值

SWIFT still fighting to assign a value to a nested array within a class

这延续了我的最后一个问题 struggling with value assignment to optional class variable,为此 David 为我提供了一个类似问题的很好提示。 经过多次迭代,我现在想出了一个不同的方法,但是,它仍然失败,我不知道为什么(以及基本上发生了什么)

我有 class 定义

struct HighScores: Codable {
    var Scores:Int
    var highscoreRecord: [HighscoreRecord]
}

struct HighscoreRecord: Codable {
    var Rank:Int
    var Date:String?
    var avDuration:Float?
    var Score:Int?
    var Tries:Int?
}

在视图控制器中,我声明了一个 HighScores 类型的变量,它可以从 JSON 文件中读取数据,或者可以在设置第一个高分时初始化。

class GameplayViewController: UIViewController {

    var jsonResult: HighScores?

   ...

    if firstHighscore == 1 {
        jsonResult?.Scores = 1
        jsonResult?.highscoreRecord.append(HighscoreRecord(Rank: 1, Date: formatter.string(from: dateStart), avDuration: Float(lblSpeed.text ?? "0.0"), Score: Int(lblRatio.text ?? "0"), Tries: hits + misses))
...
    print(jsonResult)

这会编译并运行。但是,如果我监控 jsonResult 变量,它在分配 Scores 和 highscoreRecord 值后仍然显示 nil。

发生了什么,为什么我可以在没有实际赋值的情况下正确赋值? 首先,我如何将我的值输入 jsonResult?

干杯

因此,根据上面的评论,如果您将代码更改为与此类似的内容,您将创建结构的实例并添加值。

var jsonResult: HighScores?

    if firstHighscore == 1 {
        jsonResult = HighScores(Scores: 1, highscoreRecord: [HighscoreRecord(Rank: 1, Date: "your date", avDuration: 0.0, Score: 0, Tries: 0)])
    } 

创建后,您可以根据需要使用追加方法向数组添加更多高分记录。