2016-09-22 90 views
2

我得到一個字典作爲來自服務器的JSON響應。從那個字典中有一個鍵「錯誤」現在我想要得到「錯誤」鍵的值。我知道錯誤總是會是或。所以我試圖把它作爲布爾值,但它並沒有爲我工作。請建議如何將其值轉換爲布爾值。 error0代替之間在swift中將任何對象轉換爲布爾值?

let error=jsonResult.objectForKey("error") 
    //this does not work for me 
    if(!error) 
    { 
     //proceed ahead 
    } 
+0

演員''錯誤向布爾型 – pkc456

+0

改變這種jsonResult.objectForKey( 「錯誤」)。boolValue –

回答

0

檢查平等:

let error = jsonResult.objectForKey("error") 

if error == 0 { 
    // proceed 
} 
+0

在all.Can't不行的布爾轉換爲int – Techiee

+0

誰說?編譯器還是你? – gnasher729

+0

@deepakkumar如果它是一個整數開頭,你的原始代碼應該只是工作... –

0

考慮jsonResult作爲NSDictionary中,您可以通過以下方式進行檢查。

if let error = jsonResult.objectForKey("error") as? Bool Where error == true 
{ 
// error is true 
} 
else 
{ 
// error does not exist/ false. 
} 
3

Bool不包含可以轉換IntBool的初始化。所以,Int轉換成Bool,你可以創建一個extension,即

extension Bool 
{ 
    init(_ intValue: Int) 
    { 
     switch intValue 
     { 
     case 0: 
      self.init(false) 
     default: 
      self.init(true) 
     } 
    } 
} 

現在你可以使用get鍵錯誤的值:

if let error = jsonResult["error"] as? Int, Bool(error) 
{ 
// error is true 
} 
else 
{ 
// error does not exist/ false. 
} 
+2

你可以用'self = intValue == 0'替換整個開關:) –

0

另外重要的一點在這裏,你使用Swift和解析repsonse作爲NSDictionary。我可以這樣說,因爲你使用objectForKey方法。最佳做法是將其解析爲Swift Dictionary

它可能看起來像Dictionary<String:AnyObject>[String:AnyObject]

然後你就可以檢查錯誤爲:

if let error = jsonResult["error"] where error == 0 { 
    //your code 
    } 
1

你的錯誤既不是0或1。這是一個可選的對象。如果你的JSON中沒有鍵「錯誤」,那麼它是零,否則它可能是一個NSNumber。

它很有可能是nil意思是「沒有錯誤」,如果它不是零並且包含一個零意味着「沒有錯誤」,如果它不是零並且包含一個,它意味着「錯誤」,如果它不是零和包含任何其他東西,那麼你的JSON有什麼嚴重錯誤。

試試這個:

let errorObject = jsonResult ["error"] 
if errorObject == nil or errorObject as? NSInteger == 0 

當我說 「試試」,我的意思是 「嘗試」。你是這裏負責任的開發者。檢查它是否正常工作,不包含錯誤的字典,包含錯誤0或1的字典以及包含例如error =「This is bad」的字典。

-1

下面的代碼爲我工作

if let error = jsonResult["error"] as? Int where Bool(error) 
    { 
      // error is true 
      print("error is true") 
    } 
    else 
    { 
     // error does not exist/ false. 
     print("error is false") 
    }