Как передать или реализовать данные из декодируемой модели в ViewController? - PullRequest
0 голосов
/ 17 июня 2020

Я не знаю, как передать или реализовать данные из Decodable Model в ViewController. И я ожидаю статуса 200 или сообщения "успех" в моем контроллере представления. Поэтому я могу поместить его в свой UIButton, чтобы показать пользователю, что сервер был подключен.

Я пробовал debugPrint (ответ) некоторое время go, и API работает нормально.

Мой Модель

struct ServerStatus: Decodable {

    let status: Int?
    let service: String?
    let function: String?
    let msg: String?

  enum CodingKeys: String, CodingKey {

    case status = "status"
    case service = "service"
    case function = "function"
    case msg = "msg"
  }
}

Мой вызов API с использованием Alamofire 5.0

class APIManager {
    static let sharedInstance = APIManager()

    let headers: HTTPHeaders = [
         .authorization(APIDefinitions.api_id)
    ]

    func fetchServerStatus(parameters: Parameters, completion:@escaping (_ data: ServerStatus?, _ error: String?) -> Void){
        AF.request(APIDefinitions.getServerStatus, method: .get, headers: headers).responseDecodable(of: ServerStatus.self) { (response) in
            print(response)
            switch response.result{
                case .success(let serverStatus):
                    completion(serverStatus, nil)
                    break
                case .failure( _):
                    completion(nil, "The Internet connection appears to be offline.")
                    break
            }
        }
    }
}

1 Ответ

0 голосов
/ 17 июня 2020

APIManager, который вы уже обрабатываете сетевой частью. Теперь вам просто нужно вызвать эту функцию в ViewController viewDidLoad, например:

class ViewController: UIViewController {
    let button = UIButton()
    override func viewDidLoad() {
        super.viewDidLoad()
        APIManager.sharedInstance.fetchServerStatus(parameters: nil) { (response, error) in
            if let error = error {
                button.setTitle("Connection Failed", for: .normal)
            } else if let status = status {
                if response.status == 200 || response.msg == "success" {
                    button.setTitle("Connected", for: .normal)
                } else {
                    button.setTitle("Connection Failed", for: .normal)
                }
            }
        }
    }
}
...