我正在使用alamofire将数据发布到php脚本,该脚本会将数据插入mysql数据库。这部分工作正常,但是我在服务器上进行了一些验证,例如检查有效的电子邮件地址。因此,这是快速代码:
Alamofire.request(url!, method: .post, parameters: parameters)
.validate(statusCode: 200..<300)
.responseJSON { response in
switch response.result {
case .success:
print(response)
case .failure(let error):
print(error)
}
}
这是处理插入的php。
if($booking->create($conn)) {
$response['status'] = "200";
$response['message'] = "Success";
} else {
$response['status'] = "400";
$response['message'] = $booking->errors;
}
echo json_encode($response);
迅速,控制台中验证失败的响应是:
SUCCESS: {
message = (
"Invalid email address",
"Contact number required"
);
status = 400;
}
如果没有错误,我实际上想选择另一个视图控制器,如果有错误,我可能想在标签中显示它们。
但是,最初,我只是想说是否有任何错误,将其打印出来,如果没有错误,则进行查找。但是,如果我尝试将if语句放入响应中,则会出现错误。
case .success:
if response == "200" {
// segue
}
二进制运算符'=='不能应用于类型的操作数 'DataResponse'和'String'
答案 0 :(得分:0)
我希望有人能向我展示一种更好的方法,但是我已经取得了一些进展,并且正在工作。我对Alamofire文档的理解是,如果您收到响应,则意味着无论服务器发送回什么内容,响应始终为200。因此,我可以解决的唯一方法是使用可编码将响应解析为json,然后根据该数据执行某些操作,例如:
Alamofire.request(url!, method: .post, parameters: parameters)
.responseJSON { response in
let data = response.data
let jsonDecoder = JSONDecoder()
do {
let serverResponse = try jsonDecoder.decode(PhpResponse.self, from: data!)
if serverResponse.status == "200" {
print("Success")
} else {
print(serverResponse.message)
}
} catch {
debugPrint(error.localizedDescription)
}
}
因此,我将数据从swift发布到服务器,使用php进行某种形式的验证,然后使用php的json_encode,我将其以json格式发送回swift,然后根据该响应进行操作。