抱歉,我什至不知道要搜索答案的关键字。
我想将全局结构中的所有项目存储到局部变量。
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'”]
任何想法如何做到这一点?
干杯!
highscoreRecord
是一个数组。您不能直接在其上使用.Score
,因为Array
类型没有名为Score
的属性。
但是,因为它的元素类型是HighScore
(它确实具有所需的属性),所以您可以对其进行迭代,并从每个元素中收集Score
属性。
我认为这就是您的追求:
var allGraphScores = jsonResult!.highscoreRecord.map { $0.Score }
[.map(_:)
使用一个参数进行闭包,然后依次传递序列的每个元素。
因此,.map(_:)
通过找到数组highscoreRecord.map { $0.Score }
中每个Score
的HighScoreRecord
属性来返回一个新数组。 PS,使用小写字母highscoreRecord
命名变量可能是个好主意,以提高可读性,并能使任何Swift开发人员立即识别camelCase是变量而不是对象。
您正在尝试从数组访问属性。您需要提供索引以消除错误。更新此行:
Score
为此:
var graphScore = jsonResult!.highscoreRecord.Score