从View的Json响应中获取特定的值

时间:2019-08-07 10:23:30

标签: ios json swift alamofire

我正在向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将这些值移到另一个类中。

3 个答案:

答案 0 :(得分:0)

  • 使用下面的
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 */
                    }

                }
        }

    }
}

答案 1 :(得分:0)

您为什么不只创建具有响应格式的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)
                          }

                        }
                }

            }
        }

答案 2 :(得分:0)

使用完成块,Apple为此创建了一个

import pygame
import random

screen = pygame.display.set_mode((750,750))
done = False
BLACK = (0,0,0)
WHITE = (255,255,255)
RED = (255,0,0)
BLUE = (0,0,255)

def main():
    global BLACK, done, WHITE, RED, BLUE, X, Y

    X1 = random.randint(30,300)
    Y1 = random.randint(30,300)
    W1 = random.randint(30,300)
    H1 = random.randint(30,300)

    X2 = random.randint(30,300)
    Y2 = random.randint(30,300)
    W2 = random.randint(30,300)
    H2 = random.randint(30,300)

    X3 = random.randint(30,300)
    Y3 = random.randint(30,300)
    W3 = random.randint(30,300)
    H3 = random.randint(30,300)

    screen.fill(BLACK)
    pygame.draw.rect(screen, WHITE, (X1, Y1, W1, H1))
    pygame.draw.rect(screen, RED, (X2, Y2, W2, H2))
    pygame.draw.rect(screen, BLUE, (X3, Y3, W3, H3))
    pygame.display.update()

    while not done:

        for event in pygame.event.get():

            if event.type == pygame.KEYDOWN and event.key == pygame.K_1:
                main()

            if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
                pygame.quit()
                quit()


main()
pygame.quit()
quit()

然后致电

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}


            }
    }
}