API — использование 2 кнопок для «получения», а затем «ввода» данных (модифицированных)?

#swift #alamofire

#swift #alamofire

Вопрос:

В моем приложении есть 2 кнопки, я хочу, чтобы 1 кнопка «ПОЛУЧАЛА» данные, а затем еще одна, чтобы «ПОМЕЩАТЬ» данные с некоторой измененной информацией, которую я добавил. Как бы я поступил по этому поводу? Мне в основном нужно получить доступ к уже «полученным» данным во второй кнопке, но я действительно должен понять, как это сделать.

Приведенный ниже код не является полным кодом, я удалил большую часть, чтобы его было легче читать. Он содержит функцию «получить», не знаю, куда идти дальше.

Спасибо, что проверили это, просто ищу кого-то, кто укажет мне правильное направление.

 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")
               }
                
            }
            
            
        }
    }
 

Комментарии:

1. Ваша let api локальная переменная внутри функции. Итак, вы декодируете свой основной объект, а затем выбрасываете его.

2. @matt Спасибо за ввод, но я не совсем понимаю, что вы имеете в виду, как я смогу использовать let api внешнюю функцию, не вызывая ее снова?