// 注意:解析时json与模型属性个数可以不匹配,但类型必须匹配
struct Respone: Codable {
let code: Int?
let message: String?
let data: TokenData?
}
struct TokenData: Codable {
let accessToken: String?
let type: String?
let expiresAt: Int?
// 注意:json的key和模型属性不同时,可以使用映射
enum CodingKeys: String, CodingKey {
case accessToken = "access_token"
case type
case expiresAt = "expires_at"
}
}
// MARK: - Net
private func loadData() {
// 注意:swift要求集合包含不同类型的值时要显式指定参数类型。
let parameters: [String : Any] = ["brand":"Apple", "channel":1, "device_id":"123431472xvwerbxcvbvxc", "oaid":"", "os":"17.5.2", "device_mode":"iPhone X"]
// Foundation 对象转 json data
let jsonData = try? JSONSerialization.data(withJSONObject: parameters)
let url = URL(string: "https://xxx.xxx.com/api/auth/login/guest")!
let sessionConfig = URLSessionConfiguration.default
let session = URLSession(configuration: sessionConfig);
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = jsonData
request.timeoutInterval = 5
let task = session.dataTask(with: request) { data, response, error in
if let error = error {
print("出错了")
return
}
guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else {
print("请求出错了")
return
}
if let mimeType = httpResponse.mimeType, mimeType == "application/json" {
print("响应json类型")
if let data = data {
print("data = \(String(describing: String(data: data, encoding:.utf8)))")
let decoder = JSONDecoder()
// jsonData 转 模型
if let resp = try? decoder.decode(Respone.self, from: data) {
print("resp.code = \(String(describing: resp.code))")
print("resp.message = \(String(describing: resp.message))")
print("resp.accessToken = \(String(describing: resp.data?.accessToken))")
print("resp.type = \(String(describing: resp.data?.type))")
print("resp.expiresAt = \(String(describing: resp.data?.expiresAt))")
}
// 或 jsonData 转 Foundation 对象(即基础数据类型Dictionary, Array等,非自定义类)
let jsonObj = try? JSONSerialization.jsonObject(with: data)
print("jsonObj = \(String(describing: jsonObj))")
if let dict = jsonObj as? Dictionary<String, Any?> {
print("code = \(String(describing: dict["code"]))")
}
} else {
print("data 无数据")
}
} else {
print("响应其他类型")
}
}
task.resume()
}
private func loadData1() {
let url = URL(string: "https://whatsdual.tools-global.com/api/auth/login/guest")!
let sessionConfig = URLSessionConfiguration.default
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
print("出错了")
return
}
guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else {
print("请求出错了")
return
}
if let mimeType = httpResponse.mimeType, mimeType == "application/json" {
print("响应json类型")
if let data = data {
print("data = \(String(describing: String(data: data, encoding:.utf8)))")
let decoder = JSONDecoder()
if let resp = try? decoder.decode(Respone.self, from: data) {
print("resp.code = \(String(describing: resp.code))")
print("resp.message = \(String(describing: resp.message))")
print("resp.data = \(String(describing: resp.data))")
}
} else {
print("data 无数据")
}
} else {
print("响应其他类型")
}
}
task.resume()
}
网友评论