Как извлечь данные из массива Dictionary - swift - PullRequest
0 голосов
/ 12 ноября 2018

Как я могу получить данные из этого массива? Здесь есть массив, который содержит несколько пар ключ-значение, а некоторые ключи содержат массив словаря.

 var dataArray = [
                ["teamName":"Arsenal",
                  "image":"imageName",
                  "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",
                                 "fixturesId":"ID 213432"],

                            ]
    ],["teamName":"Chelsea",
        "image":"imageName",
       "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",
                       "fixturesId":"ID 213432"],["oppositeTeam":"teamName",
                                                  "oppositeTeamScore":"7",
                                                  "HomeTeamScore":"4",
                                                  "HomeTeamCards":"True",
                                                  "oppositeTeamCards":"false",
                                                  "fixturesId":"ID 213432"]
        ]
    ],["teamName":"India",
        "image":"imageName",
       "nextMatch":"null",
       "matches":[],
       "fixtures":[]
    ]]

Я пытался, но мне не удалось получить данные из этого массива.

Ответы [ 4 ]

0 голосов
/ 12 ноября 2018

Вам нужно использовать Модель , как это

struct Team {
    let teamName:String
    let image:String
    let nextMatch:String
    let matches:[Match]?
    let fixtures:[Fixture]?
}

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

struct Fixture {
    let oppositeTeam:String
    let oppositeTeamScore:String
    let HomeTeamScore:String
    let HomeTeamCards:String
    let oppositeTeamCards:String
    let fixturesId:String
}

Далее вам нужно узнать о Codeable в swift, к которому я прикрепил статью ниже

Кодируемое руководство по быстрому

0 голосов
/ 12 ноября 2018

Вы можете получить данные из вашего массива следующим образом:

for attributesObj in dataArray{
      let dicFrmArray = attributesObj as! NSDictionary

       if ((dicFrmArray["teamName"] as? NSNull) == nil && dicFrmArray["teamName"] != nil){
     print(dicFrmArray[teamName"])

       }
}
0 голосов
/ 12 ноября 2018

Вот как вы можете получить доступ к массивам / словарям, определенным в вашем dataArray:

    // To access team object at zero index
    if let team = dataArray[0] as? [String: Any] {
        print("Team: \(team["teamName"])")

        // To access matches array of team object at zero index
        if let matches = team["matches"] as? [[String: Any]] {
            print( matches)

            // To access first match
            if let match = matches.first {
                print(match)
            }
        }

        // Similar to matches access fixtures
        if let fixtures = dataArray[0]["fixtures"] as? [[String: Any]] {
            print(fixtures)

            // To access first fixture
            if let fixture = fixtures.first {
                print(fixture)
            }
        }
    }

Это нормально, если вы просто создаете прототип. Если вы планируете расширить это в реальное приложение, создание отдельных моделей является лучшим подходом.

У вас может быть модель команды, которая может содержать название команды, изображение, матчи и матчи. Для матчей вы можете создать модель с информацией о совпадении. Точно так же вы можете создать модель для светильников. Ваш класс Team будет содержать массивы классов Match и Fixture, например:

var matches: [Match]
var fixtures: [Fixture]

и ваш dataArray будет иметь тип

var dataArray: [Team]
0 голосов
/ 12 ноября 2018

Создайте модель для ваших данных, используя Codable. Разобрать данные в модели с помощью JSON-декодера. Тогда вы можете использовать свою модель где угодно.

Для анализа JSON вы можете обратиться к этому руководству: - https://medium.com/xcblog/painless-json-parsing-with-swift-codable-2c0beaeb21c1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...