【问题标题】:Getting Specific Value From Json Response For View Controller从视图控制器的 Json 响应中获取特定值
【发布时间】:2019-12-14 23:05:15
【问题描述】:

我正在向 Alamofire 提出我的请求,并且我有一个课程来展示一些价值。我想在界面中显示值。

这是我的代码:

class API: NSObject {

   class func group1(groupid: Int) {


        Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers)
            .responseJSON { response in

                switch response.result {

                case .success(let data):
                    let json = JSON(data)
                    //print(json)

                    let ds_valIntake1 = json["data"][0]["ds_val"].int
                    let ds_valIntake1Sig = json["data"][1]["ds_val"].int
                    let ds_valLevel = json["data"][2]["ds_val"].int

                }
        }

    }
}

我想从那些“ds_val”中获取值,然后将其值显示到界面中。我不想使用 userdefaults 将这些值移动到另一个类中。

【问题讨论】:

标签: ios json swift alamofire


【解决方案1】:

使用完成块,Apple 为这些目的创建了一个

static func group1(groupid: Int, completion:@escaping (_ r:Any) -> Void) -> Void
    {

    Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers)
        .responseJSON { response in

            switch response.result {

            case .success(let data):
                let json = JSON(data)
                //print(json)
                  completion(json as Any}


            }
    }
}

然后调用

 className.group1(groupid: Int, completion: { (jsonResult) in
          let json = jsonResult as yourType
          let ds_valIntake1 = json["data"][0]["ds_val"].int
          let ds_valIntake1Sig = json["data"][1]["ds_val"].int
          let ds_valLevel = json["data"][2]["ds_val"].int
        })

【讨论】:

    【解决方案2】:

    您为什么不直接使用您的响应格式创建一个Codable 类?然后您可以使用JSONSerialization 将数据获取到可编码对象中,然后将其传递回完成块中。

    创建一个可编码的类:

        class Response: Codable { 
                    //Populate this with all the fields you need
         }
    

    然后在你的 Alamofire 调用中你可以写:

    class API {
    
               func group1(groupid: Int, onSuccess: @escaping Response) {
    
    
                    Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers)
                        .responseJSON { response in
    
                            switch response.result {
    
                            case .success(let data):
                            if let data = JSONDecoder.decode(Response.self, from: responseObject) {
                                  onSuccess(data)
                              }
    
                            }
                    }
    
                }
            }
    

    【讨论】:

      【解决方案3】:
      • 使用下面的
      import Foundation
      
      class ResponseModel: Codable {
      
          var data: [DataModel]?
      
          private enum CodingKeys : String, CodingKey {
              case data = "data"
          }
      
      }
      
      class DataModel: Codable {
      
          var ds_val: Int?
      
          private enum CodingKeys : String, CodingKey {
              case ds_val = "ds_val"
          }
      
      }
      
      func buildObjectFromResponse(data: Data?) -> ResponseModel? {
          var object : ResponseModel?
          do {
              object = try JSONDecoder().decode(ResponseModel.self , from: data!)
          } catch (let error){
              print(error)
          }
          return object
      }
      
      class API: NSObject {
      
          class func group1(groupid: Int) {
      
      
              Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers)
                  .responseJSON { response in
      
                      switch response.result {
      
                      case .success(let data):
      
                          if let response = buildObjectFromResponse(data: data){
                               /* save things to UserDefaults here */
                          }
      
                      }
              }
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-11
        • 2021-12-19
        • 2019-08-26
        • 1970-01-01
        • 2021-02-04
        相关资源
        最近更新 更多