使用Decodable使用嵌套数据进行结构化

时间:2018-05-14 06:29:03

标签: swift struct decodable

我正在使用Alamofire在Swift 4中使用API​​。我正在使用结构来创建我希望在该响应中使用的数据模型,并确认可解码。

我的回答看起来像......

    {  
       "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 :(得分:2)

"规则" 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
}