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)])
}
创建后,您可以根据需要使用追加方法向数组添加更多高分记录。
这延续了我的最后一个问题 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)])
}
创建后,您可以根据需要使用追加方法向数组添加更多高分记录。