如何将数据传递到模型类并从模型类获取数据-Swift

时间:2018-11-13 05:57:48

标签: ios swift class parsing model

这是我用于存储数据的模型类

class TeamData {
    let teamName : String
    let image : String
    let nextMatch : String
    let matches : [Match]
}

class Match {
    let oppositeTeam : String
    let matchTimings : String
    let matchId : String
}

这是我现在要从中获取数据的数据数组(替代JSON)

var dataArray = [
                ["teamName":"Arsenal",
                  "image":"Arsenal",
                  "nextMatch":"in 2 days",
                  "matches":[
                                ["oppositeTeam":"teamName",
                                 "matchTimings":"121212",
                                 "matchId":"ID 213432"],
                                ["oppositeTeam":"teamName",
                                 "matchTimings":"121212",
                                 "matchId":"ID 213432"]
                            ],
                  "fixtures":[
                                ["oppositeTeam":"teamName",
                                 "oppositeTeamScore":"7",
                                 "HomeTeamScore":"4",
                                 "HomeTeamCards":"True",
                                 "oppositeTeamCards":"false",
                                 "fixtureId":"ID 213432”    
                            ]
                 ]
    ]]

这就是我使用dataArray的for循环获取数据的方式。但是现在我现在不知道如何将数据传递给模型类,然后在tableview中使用模型类显示此数据。我为数据模型创建了一个init(),但是我很困惑如何获取匹配的数据:[Match]。

for data in dataArray {
    if let matches = data["matches"] as? [[String: Any]] {
        for data in matches {

        }
    }

    if let fixtures = data["fixtures"] as? [[String: Any]] {
        for data in fixtures {

        }
    }
}

1 个答案:

答案 0 :(得分:1)

问题是您在dataArray中的对象只是字符串数组,而不是具有属性的对象。因此,如果要将其解码为自定义类,请像这样编辑dataArray

class TeamData: Codable {
    var teamName : String
    var image : String
    var nextMatch : String
    var matches : [Match]
    var fixtures : Fixtures
}

class Match: Codable {
    var oppositeTeam : String
    var matchTimings : String
    var matchId : String
}

在您的课程上使用可编码协议

class Fixtures: Codable {
    var oppositeTeam : String
    var oppositeTeamScore : String
    var homeTeamScore : String
    var homeTeamCards : String
    var oppositeTeamCards : String
    var fixtureId : String
}

也不要忘记创建夹具类

let teamDataArray = JSONDecoder().decode([TeamData].self, from: dataArray)

现在在您可以让dataArray使用JSON解码器对该JSON数组进行解码的地方

teamDataArray[0].image /* This value should be Arsenal */

现在,例如,如果需要,请获取第一个TeamData对象并说出其图像

{{1}}