我在解码 json 时遇到问题,我无法在结构上使用“self”函数,因为我通过 1 个键(名称为“my_profile”)和许多值从服务器获取 json,我通过索引返回这些值,我想将其解码为结构体,请帮助我
Alamofire.request(mainUrl, method:.post , parameters: paramstring , encoding: JSONEncoding.default, headers: nil).responseJSON {
response in
if let data = response.data
{
switch response.result
{
case.failure(let error):
print(error)
case.success(let value):
let json=JSON(value)
guard let dataarr = json["my_profile"].array else { return }
// I wan't send it to the structure , and get it from another view controllers
var name = dataarr[0]
var last_name = dataarr[1]
var email = dataarr[2]
}
}
}
这是我的结构
struct UserInfo : Decodable {
var name : String
var last_name : String
var emai : String
}
Json结构:
最佳答案
最好为您的struct
编写一个初始化程序:
struct UserInfo : Decodable {
var name : String
var last_name : String
var email : String
init(name: String, lastName: String, email: String) {
self.name = name
self.last_name = lastName
self.email = email
}
}
然后你可以使用这样的东西(根据你的具体需求进行调整):
let json = JSON(value)
guard let dataarr = json["my_profile"].arrayValue else { return }
let stringArray = dataarr.map { $0.stringValue }
var name = stringArray[0]
var last_name = stringArray[1]
var email = stringArray[2]
let userInfo = UserInfo(name: name, lastName: last_name, email: email)
// use `userInfo` object
要将对象传递给新的 View Controller ,您应该在 NewViewController
中定义一个变量来存储 userInfo
对象:
let userInfo: UserInfo!
然后在上面的代码中,您应该在最后调用这些行(它使用 Storyboard):
// ...
let userInfo = UserInfo(name: name, lastName: last_name, email: email)
let controller = storyboard?.instantiateViewController(withIdentifier: "NewViewController") as! NewViewController
controller.userInfo = userInfo
present(controller, animated: true, completion: nil)
其中,NewViewController
是显示 userInfo
对象内容时的新 Controller 。不要忘记在 Storyboard 中将新 View Controller 标识符设置为 NewViewController
。
关于json - Alamofire 通过数组索引进行解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50921460/