这是我的代码:
do {
if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
print(json)
let success = json ["success"] as? Int
print("Success: \(success)")
这是我的输出:
{
error = "Account does not exist, please create it!";
}
Success: nil
`
所以,在let success = json ["success"] as? Int
之前,一切都运作良好,但为什么我的输出在这一行之后nil
?
这是我的php:
public function login($username,$password) {
$query = "Select * from users where username = '$username' and password = '$password'";
$result = mysqli_query($this->connection, $query);
if (mysqli_num_rows($result) > 0) {
$json['success'] = 'Welcome '. $username . '!';
echo json_encode($json);
mysqli_close($this->connection);
} else {
$json['error'] = 'Account does not exist, please create it!';
echo json_encode($json);
mysqli_close($this->connection);
}
答案 0 :(得分:2)
let success = json ["success"] as? Int
当您使用此行时,它将提取键的值" success"。由于您的json响应不包含该字段,因此它在success变量中设置为nil。
除错误键外,您还需要返回成功键。
答案 1 :(得分:2)
成功是nil
因为关键的成功'在JSON中不存在。
X as? Int
=尝试在可能的情况下使x成为Int
。如果不可能(因为值为nil或值无法转换为Int
),请将其设为Nil
。这就是问号的作用。
所以,我会这样做:
if let success = json ["success"] as? Int {
print("Success: \(success)")
} else {
// Failed
}
您还可以更改您的PHP代码,以确保它始终返回成功'键。但是,我建议使用上面的Swift代码,因为你总是安全的。