2016-12-15 73 views
0

我在我的iOS應用中使用alamofire進行http請求。當我在Swift中訪問如下所示的響應值時,如果鍵不存在或獲取空值時會發生崩潰。當objectForKey(「Id」)Id不存在時崩潰?

var id = (response.result.value?[p-1].objectForKey("Id"))! as? Int 

一般來說,我們如何檢查一個在Swift中不存在的值?

回答

2

你應該試試這個

if let id = (response.result.value?[p-1].objectForKey("Id"))? as? Int { 
    // some stuff 
} 

您的應用程序崩潰,因爲你解開無對象:.objectForKey(「ID」)

+0

讓它'如果讓ID = response.result.value?[p-1] .objectForKey(「Id」)as? Int',這是最好的答案。 – overactor

+0

你是對的@overactor,我粘貼他的代碼,括號是沒用的 –

0

你必須解開您的自選項目,而不強迫它。在你的情況,你也應該考慮檢查response.result.value是否具有至少p-1元素:

if let value = response.result.value 
{ 
    if p-1 < value.count 
    { 
     if let id = value[p-1].objectForKey("Id") as? Int 
     { 
      // Do whatever you want with id 
     } 
    } 
} 

您還可以使用guard聲明,我個人覺得更清晰:

guard let value = response.result.value 
    else { return } 
guard p-1 < value.count 
    else { return } 
guard let id = value[p-1].objectForKey("Id") as? Int 
    else { return } 

// Do whatever you want with id 
+0

你沒有使用可選的鏈接,你可以看看@ ArnaudWurmel的例子。 – overactor

+0

我知道,我分解了可選的鏈,使其更清晰的OP。 – Randy