簡體   English   中英

如何保存來自 API 調用(GET)的 JSONdata 以供以后用於 API 請求(PUT)?

[英]How to save JSONdata from API-call(GET) to later use for an API-request(PUT)?

這就是我想要完成的:

  1. 使用條形碼掃描儀掃描項目並發送“ GET REQUEST ”以檢索 json 數據。
  2. 使用用戶輸入修改數據(更改編號、文本等)。
  3. 使用修改后的數據/變量將“ PUT REQUEST ”作為 httpbody 發送出去。

我不知道實現這一目標的最佳方法是什么,我迷路了! 我可以以某種方式從 function 中返回變量“參數” ,以便我可以修改它並與另一個 function 一起發送嗎?

下面的代碼不是完整的代碼,我刪除了很大一部分以使其更易於閱讀。 它包含一個“獲取”function,不知道從哪里到 go。

感謝您檢查它,只是想找人指出我正確的方向。

import UIKit
import AVFoundation
import QRCodeReader
import Alamofire

// MARK: - Main
struct Main: Codable {
    let objects: [Object]
}


// MARK: - Object
struct Object: Codable {
    let inventory: [Inventory]
}


// MARK: - Inventory
struct Inventory: Codable {
    let coordinates: String

}





    func test() {
        
        // MARK: - LOGIN DETAILS
        let headers: HTTPHeaders = [
            .authorization(username: "username", password: "password"),
            .accept("application/json")]
        
        // MARK: - API REQUEST
        AF.request("URL LINK", headers: headers).validate().responseJSON { response in
            
            // MARK: - CHECK FOR ERRORS
            if let error = response.error {
                print(error)
                
                // MARK: - ERROR MESSAGE
                DispatchQueue.main.async
                { let alert = UIAlertController(title: "ERROR", message: "Something went wrong", preferredStyle: .alert)
                    
                alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
                    
                self.present(alert, animated: true)}
                return}
            
            // MARK: - PRINT RESPONSE
            if response.response != nil
            {print (response.response!) }
            
            // MARK: - PRINT DATA
            if response.data != nil
            { print(response.data!)
              let decoder = JSONDecoder()
               do
            {
                let api = try decoder.decode(Main.self, from: response.data!)
                
                let parameters = [
                        "meta": [
                            "language": "en"
                        ],
                        "request": [
                             "inventory": [
                            [
                                "id": 6534206,
                                "warehouseid": 1,
                                "instock": 3,
                                "threshold": 0,
                                "reserved": 0,
                                "coordinates": "\(api.objects[0].inventory[0].coordinates)",
                                "note": "",
                                "prodno": 25669,
                                "soldout": 0
                            ]
                        ]
                        ]
                ]
                
            }
               
               catch {
                   print("Error in JSON parsing")
               }
                
            }
            
            
        }
    }


您可以使用閉包從 function 中返回值。 這種做法是函數式編程,幾乎用於異步 function。

func test(completion: ([String: AnyObject]) -> ()) {
    ...
    let param = [“meta”: [“language”: “en”],...]
    completion(param)
}

然后,使用它:

test(completion: { param in
    // handle the “param”
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM