【发布时间】:2017-07-05 09:38:43
【问题描述】:
我正在尝试使用 Alamofire 对象映射器解析 JOSN 数据..完成了基本的事情,但遇到了复杂的事情,例如
1.如何访问“settings_data”中的值? (这是访问嵌套对象的最佳方式)
2.我可以在哪里定义 .GET、.POST 方法类型以及我们应该在哪里传递参数?就像我们写的正常的 alamofire 请求一样
Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default)
.responseJSON { response in
有什么好的方法可以达到同样的效果吗?
JOSN 回应
{
"err": 0,
"result": [{
"id": 71930,
"account_id": 40869,
"status": "enabled",
"settings_data": {
"time_format": "12h",
"timezone": "US/Pacific",
"fingerprint_versions": {
"browser.browser-js": 1
},
"integrations": {
"jira": {},
"datadog": {},
"bitbucket": {},
"github": {},
"trello": {
"board_id": "xxx",
"enabled": true,
"access_token_user_id": 1234,
"list_id": "xxxxx"
},
"slack": {
"channel_id": "xxxx",
"enabled": true,
"access_token_user_id": "xx"
},
"webhook": {},
"victorops": {},
"asana": {},
"pivotal": {},
"campfire": {},
"sprintly": {},
"pagerduty": {},
"hipchat": {},
"email": {
"enabled": true
},
"flowdock": {}
}
},
"date_created": 1468068105,
"date_modified": 1493409629,
"name": "Android_ParentApp"
}, {
"id": 71931,
"account_id": 40869,
"status": "enabled",
"settings_data": {
"time_format": "12h",
"timezone": "US/Pacific",
"fingerprint_versions": {
"browser.browser-js": 1
},
"integrations": {
"jira": {},
"datadog": {},
"bitbucket": {},
"github": {},
"trello": {
"board_id": "xxxx",
"enabled": true,
"access_token_user_id": 1234,
"list_id": "xxxxx"
},
"slack": {
"channel_id": "xxxxx",
"enabled": true,
"access_token_user_id": "xxx"
},
"webhook": {},
"victorops": {},
"asana": {},
"pivotal": {},
"campfire": {},
"sprintly": {},
"pagerduty": {},
"hipchat": {},
"email": {
"enabled": true
},
"flowdock": {}
}
},
"date_created": 1468068142,
"date_modified": 1493409658,
"name": "Android_TeacherApp"
}]
}
模型类 - Project.swift
import Foundation
import ObjectMapper
class Project: NSObject, Mappable {
var projectId: Int?
var accountId: Int?
var dateCreated: Int?
var dateModified: Int?
var name: String?
var status: String?
override init() {
super.init()
}
convenience required init?(map: Map) {
self.init()
}
func mapping(map: Map) {
projectId <- map["id"]
accountId <- map["account_id"]
dateCreated <- map["date_created"]
dateModified <- map["date_modified"]
name <- map["name"]
status <- map["status"]
}
}
ViewController.swift
import UIKit
import Alamofire
import AlamofireObjectMapper
class ViewController: UIViewController {
var projects:[Project] = []
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
fetchData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func fetchData(){
UIApplication.shared.isNetworkActivityIndicatorVisible = true
let apiUrl = "https://raw.githubusercontent.com/javalnanda/AlamofireObjectMapperSample/master/AOMsample.json"
Alamofire.request(apiUrl).validate().responseArray(keyPath: "result") { (response: DataResponse<[Project]>) in
UIApplication.shared.isNetworkActivityIndicatorVisible = false
switch response.result {
case .success:
print(response.result)
self.projects = response.result.value ?? []
// print("sss \(self.projects)")
for project in self.projects {
print( project.name ?? "")
}
case .failure(let error):
print(error)
}
}
}
}
【问题讨论】:
-
您为什么不阅读文档? github.com/Hearst-DD/…
标签: ios swift alamofire objectmapper