Структурировать вложенные данные с помощью Decodable - PullRequest
0 голосов
/ 14 мая 2018

Я использую API в Swift 4, используя Alamofire. Я использую структуры для создания моделей данных, которые я хочу использовать в этом ответе, и подтверждаю, что можно декодировать.

Мой ответ выглядит так ...

    {  
       "pagination":{  
          "per_page":50,
          "items":3909,
          "page":1,
          "urls":{  
             "last":"https://api.discogs.com/database/search?q=ed+rush&per_page=50&secret=foo&page=79&key=bar",
             "next":"https://api.discogs.com/database/search?q=ed+rush&per_page=50&secret=foo&page=2&key=bar"
          },
          "pages":79
       },
       "results": []
    }

Моя модель выглядит следующим образом ...

struct SearchResults: Decodable {
    let pagination: SearchPagination
    let results: [SearchResult]
}

struct SearchResult: Decodable {
    let type: String
}

struct SearchPagination: Decodable {
    let per_page: Int
    let items: Int
    let page: Int
    let pages: Int
}

То, что я пытаюсь понять, это то, как я бы смоделировал нумерацию страниц, поскольку urls сам является вложенным объектом. Я создаю структуру только для urls или я что-то упускаю здесь очевидное?

Возможно, структура - не лучший подход? Я пришел из JS, и структуры очень похожи на интерфейс в TypeScript, но я знаю, что здесь что-то не хватает.

1 Ответ

0 голосов
/ 14 мая 2018

«Правило» Decodable состоит в том, что любой словарь {} становится структурой / классом, а каждый ключ становится свойством.

struct SearchPagination: Decodable {
    let per_page: Int
    let items: Int
    let page: Int
    let pages: Int
    let urls: URLData
}

struct URLData: Decodable {
    let last, next : URL
}
...