как передать данные в класс модели и получить данные из класса модели - swift - PullRequest
0 голосов
/ 13 ноября 2018

это мой модельный класс для хранения данных

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.но теперь я не знаю, как передать данные в класс модели, а затем использовать класс модели в табличном представлении для отображения этих данных.я создаю 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 голосов
/ 13 ноября 2018

Проблема в том, что ваш объект в dataArray - это просто массив строк, а не объект со свойствами. Поэтому, если вы хотите декодировать его в свой пользовательский класс, отредактируйте свой 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", /* I renamed this with small first letter*/
                   "homeTeamCards":"True", /* I renamed this with small first letter*/
                   "oppositeTeamCards":"false",
                   "fixtureId":"ID 213432”}
        }
    ]

Используйте кодируемый протокол на ваших уроках

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
}

также не забудьте создать класс Fixtures

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

и теперь где-нибудь, где у вас есть dataArray, декодируйте этот массив JSON с помощью JSON декодера

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

Теперь, если вам нужно, например, получить первый объект TeamData и получить его изображение, скажем

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