【问题标题】:SWIFT still fighting to assign a value to a nested array within a classSWIFT 仍在努力为类中的嵌套数组赋值
【发布时间】:2020-09-20 17:19:55
【问题描述】:

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

我有类定义

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?

干杯

【问题讨论】:

  • 自上一个问题以来,您仍然没有给 jsonResult 一个值,所以它仍然是 nil。你需要做jsonResult = ...
  • 这里发生的情况是,当在jsonResult?.Scores = 1 中使用? 时,您是说 if jsonResult 不是 nil 然后将 1 分配给 Scores 否则执行没什么,所以编译器或运行时没有什么可抱怨的,因为代码是正确的。因此,您需要调查代码中需要实例化 jsonResult 属性的位置
  • 在提出上面的代码之前,我尝试了 jsonResult?.highscoreRecord = [HighscoreRecord]() 的多种变体
  • 在提出上面的代码之前,我尝试了许多 jsonResult?.highscoreRecord = [HighscoreRecord]() 的变体,但都没有成功。所以我很高兴上面的代码没有抛出错误。那么在给定它背后的类结构的情况下,我如何将初始值传递给 jsonResult 呢?

标签: arrays swift class nested initialization


【解决方案1】:

因此,如果您将代码更改为与此类似的内容,则从上面的 cmets 开始,您将创建结构的实例并添加值。

var jsonResult: HighScores?

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

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

【讨论】:

  • 现在我明白了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2018-01-03
  • 1970-01-01
  • 2021-06-09
  • 2021-03-04
  • 1970-01-01
  • 2021-04-27
相关资源
最近更新 更多