使用 Decodable 构造嵌套数据
Struct with nested data using 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 中的接口,但是我知道我可能在这里遗漏了一些东西。
Decodable
的"rule"是任意字典{}
变成struct/class每个key变成属性.
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
}
我正在使用 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 中的接口,但是我知道我可能在这里遗漏了一些东西。
Decodable
的"rule"是任意字典{}
变成struct/class每个key变成属性.
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
}