【问题标题】:Alamofire decoding by index of array通过数组索引进行 Alamofire 解码
【发布时间】:2018-06-19 05:55:47
【问题描述】:

我在解码 json 时遇到问题,我不能在 struct 上使用 '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 结构:

【问题讨论】:

  • 你应该指出你正在使用SwiftyJSON
  • 我应该打印我的 json 吗?
  • 是的,这会很有帮助
  • 添加到描述中
  • 创建 UserInfo 对象并为其设置值,并将 UserInfo 数组添加到数组中

标签: json swift alamofire decodable


【解决方案1】:

最好为你的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

要将对象传递给新的视图控制器,您应该在NewViewController 中定义一个变量来存储userInfo 对象:

let userInfo: UserInfo!

然后从上面的代码中你应该在最后调用这些行(它使用故事板):

// ...
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)

当您将显示userInfo 对象内容时,NewViewController 是新控制器。不要忘记在情节提要中将新的视图控制器标识符设置为NewViewController

【讨论】:

  • 我可以在另一个视图控制器中使用这个值,以便在视图中显示
  • 当然,你只需要将它传递给新的视图控制器
  • 哥们,你能给我在另一个控制器中初始化的解决方案吗)对不起
猜你喜欢
  • 2018-05-02
  • 2023-03-22
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2018-08-20
  • 2015-02-11
  • 1970-01-01
相关资源
最近更新 更多