2016-02-11 95 views
0

這是我的代碼:獲取JSON響應迅速的值

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

我假設你解析的JSON不包含關鍵「成功」,這就是爲什麼它是零。但沒有看到JSON,這只是一個假設。 – Ollie

+1

謝謝,在您的PHP'else'語句中,您不會爲「成功」關鍵字返回值,這就是爲什麼它是零。 – Ollie

+0

哦,那就對了。謝謝! –

回答

2

let success = json ["success"] as? Int

當你使用這條線將提取關鍵 「成功」 的價值。由於你的json響應不包含該字段,它會在成功變量中設置nil。

與錯誤鍵一起,您還需要返回成功鍵。

+0

那麼我需要做什麼? –

+1

您還需要在else部分添加成功鍵。或者您可以添加另一個名爲「狀態」的密鑰,該密鑰將返回登錄是否成功。如果狀態表示成功,他們可以在「成功」鍵中顯示消息。如果狀態顯示錯誤,那麼您可以在「錯誤」鍵中顯示消息 – Joyson

2

成功是nil,因爲JSON中不存在鍵'success'。

X as? Int =如果可能的話,儘量使x從x開始變爲Int。如果不可能(因爲該值爲零或該值不能轉換爲Int),請將其設爲Nil。問號就是這樣。

所以,我這樣做:

if let success = json ["success"] as? Int { 
    print("Success: \(success)") 
} else { 
    // Failed 
} 

你也可以改變你的PHP代碼,以確保它總是返回「成功」的關鍵。不過,我會建議使用上面的Swift代碼,因爲你總是安全的。