我需要"复制"从JSON中的远程Web API服务返回的entiry.它看起来像这样:
{
"field1": "some_id",
"entity_name" = "Entity1"
"field2": "some name",
"details1": [{
"field1": 11,
"field2": "some value",
"data": {
"key1": "value1",
"key2": "value2",
"key3": "value3",
// any other, unknown at compile time keys
}
}],
"details2": {
"field1": 13,
"field2": "some value2"
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的尝试:
struct Entity1 {
struct Details1 {
let field1: UInt32
let field2: String
let data: [String: String]
}
struct Details2 {
let field1: UInt32
let field2: String
}
let field1: String
static let entityName = "Entity1"
let field2: String
let details1: [Details1]
let details2: Details2
}
Run Code Online (Sandbox Code Playgroud)
像这样:
//doesn't compile
struct Entity1 {
let details1: [Details1 {
let field1: UInt32
let field2: String
let data: [String: String]
}]
Run Code Online (Sandbox Code Playgroud)
Vic*_*ler 18
你可以使用任何以下好的开源库来处理Swift中JSON到Object的映射,看一下:
每个人都有一个很好的初学者教程.
关于structor 的主题class,您可以考虑Swift编程语言文档中的以下文本:
结构实例始终按值传递,类实例始终通过引用传递.这意味着它们适用于不同类型的任务.在考虑项目所需的数据结构和功能时,请确定是将每个数据结构定义为类还是结构.
作为一般准则,考虑在满足以下一个或多个条件时创建结构:
- 该结构的主要目的是封装一些相对简单的数据值.
- 当您分配或传递该结构的实例时,期望复制封装的值而不是引用是合理的.
- 结构存储的任何属性本身都是值类型,也可以复制而不是引用它们.
- 该结构不需要从另一个现有类型继承属性或行为.
结构的良好候选者的例子包括:
- 几何形状的大小,可能封装了width属性和height属性,两者都是Double类型.
- 一种引用系列中的范围的方法,可能包含类型为Int的start属性和length属性.
- 三维坐标系中的一个点,可能包含x,y和z属性,每个属性为Double.
在所有其他情况下,定义一个类,并创建要通过引用管理和传递的类的实例.实际上,这意味着大多数自定义数据结构应该是类,而不是结构.
我希望这对你有帮助.
HandyJSON正是你所需要的.参见代码示例:
struct Animal: HandyJSON {
var name: String?
var id: String?
var num: Int?
}
let jsonString = "{\"name\":\"cat\",\"id\":\"12345\",\"num\":180}"
if let animal = JSONDeserializer.deserializeFrom(json: jsonString) {
print(animal)
}
https://github.com/alibaba/handyjson
豆荚:
更多信息:
使用iTunes Search API通过简单请求获取 iTunes 搜索结果https://itunes.apple.com/search?term=jack+johnson
import UIKit
import Alamofire
// Itunce api doc: https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api/#searching
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
loadData()
}
private func loadData() {
let urlString = "https://itunes.apple.com/search?term=jack+johnson"
Alamofire.request(urlString).response { response in
guard let data = response.data else { return }
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let result = try decoder.decode(ItunceItems.self, from: data)
print(result)
} catch let error {
print("\(error.localizedDescription)")
}
}
}
}
struct ItunceItems: Codable {
let resultCount: Int
let results: [ItunceItem]
}
struct ItunceItem: Codable {
var wrapperType: String?
var artistId: Int?
var trackName: String?
var trackPrice: Double?
var currency: String?
}
Run Code Online (Sandbox Code Playgroud)
你可以使用 SwiftyJson 和let json = JSONValue(dataFromNetworking)
if let userName = json[0]["user"]["name"].string{
//Now you got your value
}
| 归档时间: |
|
| 查看次数: |
18755 次 |
| 最近记录: |