提问者:小点点

如何将可解码模型中的数据传递或实现到ViewController?


我不知道如何将数据从可解码模型传递或实现到ViewController。 我希望在我的视图控制器中显示状态200或消息“成功”。 所以我可以把它放在我的UIButton中,向用户显示服务器已经连接。

我在一段时间前尝试了debugPrint(response),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"
  }
}

我使用Alamofire 5.0的API调用

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个答案

匿名用户

您已经处理网络部分的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)
                }
            }
        }
    }
}