SWIFT:将结构数组中某项的所有值分配给变量

问题描述 投票:1回答:2

抱歉,我什至不知道要搜索答案的关键字。

我想将全局结构中的所有项目存储到局部变量。

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

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

全局变量基于此结构,并填充在UIViewController中

var jsonResult: HighScores?

现在,在另一个UIViewController中,我想提取所有Highscores的Score值并将其存储到本地变量。我认为它应该看起来像这样,但是,我没有使它起作用

@IBDesignable class ScoreTimeGraphView: UIView {

    var graphScore = jsonResult!.highscoreRecord.Score

上面的声明抛出“类型'[HighscoreRecord]'的值没有成员'Score'”]

任何想法如何做到这一点?

干杯!

arrays swift variables struct
2个回答
1
投票

highscoreRecord是一个数组。您不能直接在其上使用.Score,因为Array类型没有名为Score的属性。

但是,因为它的元素类型是HighScore(它确实具有所需的属性),所以您可以对其进行迭代,并从每个元素中收集Score属性。

我认为这就是您的追求:

    var allGraphScores = jsonResult!.highscoreRecord.map { $0.Score }

[.map(_:)使用一个参数进行闭包,然后依次传递序列的每个元素。

因此,.map(_:)通过找到数组highscoreRecord.map { $0.Score }中每个ScoreHighScoreRecord属性来返回一个新数组。 PS,使用小写字母highscoreRecord命名变量可能是个好主意,以提高可读性,并能使任何Swift开发人员立即识别camelCase是变量而不是对象。


0
投票

您正在尝试从数组访问属性。您需要提供索引以消除错误。更新此行:

Score

为此:

var graphScore = jsonResult!.highscoreRecord.Score
© www.soinside.com 2019 - 2024. All rights reserved.