【问题标题】:SWIFT: assigning all values of an item in a structure array to a variableSWIFT:将结构数组中项目的所有值分配给变量
【发布时间】:2020-09-24 14:43:53
【问题描述】:

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

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

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 中,我想提取所有高分的 Score 值并将其存储到局部变量中。我认为它应该看起来像这样,但是,我没有让它工作

@IBDesignable class ScoreTimeGraphView: UIView {

    var graphScore = jsonResult!.highscoreRecord.Score

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

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

干杯!

【问题讨论】:

    标签: arrays swift variables struct


    【解决方案1】:

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

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

    我想这就是你所追求的:

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

    .map(_:) 接受一个带参数的闭包,依次传入序列的每个元素。

    因此,highscoreRecord.map { $0.Score } 通过在数组highscoreRecord 中查找每个HighScoreRecordScore 属性返回一个新数组。


    PS 使用小写的 camelCase 命名变量可能是个好主意,这样便于任何 Swift 开发人员阅读和立即识别 Score 是一个变量而不是一个对象。

    【讨论】:

    • 太好了,这正是我所追求的!像魅力一样工作(至少声明,对于结果我需要进一步编码:-))结构中的变量很好。
    【解决方案2】:

    您正在尝试从数组中访问该属性。您需要提供一个索引来消除错误。更新这一行:

    var graphScore = jsonResult!.highscoreRecord.Score
    

    到这里:

    var graphScore = jsonResult!.highscoreRecord[0].Score
    

    【讨论】:

    • 嗨@Frankenstein,问题是,我想存储从highscoreRecord[n]到graphScore的所有分数。所以 graphScore 将是一个包含任何 Highscore 的所有分数的数组
    • 当您访问数组中变量的属性时,您需要提供索引。它不能像 highscoreRecord.Score 那样工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2014-08-20
    • 2015-12-06
    • 1970-01-01
    • 2013-03-15
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多