Как быстро сохранить токен от ответа Alamofire - PullRequest
0 голосов
/ 03 августа 2020

Я сейчас учусь быстро, поэтому прошу прощения за софтбол. Моя цель здесь - создать и отобразить ответ API в приложении. Мой первый шаг - получить токен доступа. Следующим шагом является использование этого токена в вызове API для получения нужных мне данных.

Я могу заставить начальный вызов работать с помощью AlamoFire. Я также могу получить ответ и проанализировать его на предмет токена. Однако я не могу сохранить этот токен вне функции, что означает, что я не могу сделать свой второй вызов.

Из того, что я читаю, мне нужно использовать структуру для назначения ответа api в глобально доступную переменную, но, похоже, мне все еще что-то не хватает, поскольку я не могу присвоить значение переменной через структуру. Я пытаюсь вывести токен на экран в качестве доказательства того, что я сохранил токен в глобально доступном месте. Попытка определения местоположения находится внизу под номером resultstext.text = temptext + tempstore + ???token. Однако он не позволяет мне вызывать access_token или token, поскольку это «неразрешенные идентификаторы». Я боролся с этим время от времени несколько дней, и мне нужен пу sh, чтобы это снова заработало.

  1. Это лучший способ сделать это?
  2. Если да, то что я делаю не так?

Заранее благодарю вас за любую информацию!

import UIKit
import Alamofire

class ViewController: UIViewController {

    @IBOutlet weak var partnumberlabel: UILabel!
    @IBOutlet weak var partnumberentry: UITextField!
    @IBOutlet weak var storelabel: UILabel!
    @IBOutlet weak var storeentry: UITextField!
    @IBOutlet weak var resultstext: UILabel!

    struct Tken: Codable {
        let access_token: String

        enum CodingKeys: String, CodingKey {
            case access_token = "access_token"
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()     
    }

    @IBAction func submitbutton(_ sender: Any) {
        let headers:HTTPHeaders = [
            "Content-Type": "application/x-www-form-urlencoded",
            "User-Agent": "PostmanRuntime/7.20.1",
            "Accept": "*/*",
            "Host": "api.xxx.xxx",
            "Accept-Encoding": "gzip, deflate",
            "Content-Length": "206",
            "Connection": "keep-alive"
        ]
 
        let params = [
            "client_id": "xxx",
            "client_secret": "xxx",
            "account": "xxx",
            "user": "xxx",
            "grant_type": "xxx",
            "scope": "xxx"
        ]

        let token_url = "https://api.xxx.xxx/auth/connect/token"
        
        AF.request(token_url, method: .post, parameters: params, headers: headers).responseJSON { response in
            switch response.result {
            case .success(let JSON):
                print("button tapped")
                let response = JSON as! NSDictionary
                let token = response.object(forKey: "access_token") as! String?
                do {
                    let res = try JSONDecoder().decode(Tken.self, from: JSON as! Data)
                } catch {
                    print(error)
                }
                print(token!)
                print("the end")

            case let .failure(error):
                print(error)
            }   
        }
        let temptext = partnumberentry.text!
        let tempstore = storeentry.text!
        resultstext.text = temptext + tempstore + ???token
    }
}

...