我不知道如何将数据从可解码模型传递或实现到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
}
}
}
}
您已经处理网络部分的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)
}
}
}
}
}