2014-07-03 131 views
1

我想檢查一個鍵是否存在於NSDictionary中,然後處理大小寫。但是,當價值爲零時,爲什麼這種情況會得到滿足?爲什麼如果(無)評估爲真?

results: NSDictionary 
println(results) 

打印此:

{ 
    error = (
     { 
      code = 402; 
      message = "User exists for this email"; 
      username = "[email protected]"; 
     } 
    ); 
} 

但是當我在一個if塊檢查,爲什麼越來越裏面?

if(results["results"]) 
    { 
     println("why here?"); 
    } 

這裏,如果(無)應該失敗,但它不是。 我也嘗試使用results.valueForKey(「results」),results.objectForKey(「results」),但它們都有例外。

如果我用這個崩潰與運行時錯誤:

if let dict: results["results"] 

更新: 就發現,控制跳轉到後第一時間函數的開始被正確評估,然後運行時間發生。那麼爲什麼函數會循環兩次然後崩潰呢?

+0

嘗試'如果讓dict = results [「results」]' – Kevin

+0

試過,仍然崩潰。 – srinivas

+0

崩潰?這是一個編譯器錯誤,提供一個雷達。 – Kevin

回答

3

這不是我看到的行爲。按照預期,以下代碼打印"just what I expect"

let results: NSDictionary = ["foo": "bar"] 

if results["baz"] { 
    println("why here?"); 
} else { 
    println("just what I expect"); 
} 

必須有別的東西給它,這是不包括在你的問題。

+0

我在上面的問題中打印了NSDictionary。不明白爲什麼它不在這裏工作。 – srinivas

+1

我只是嘗試了這個相同的代碼,並且它在if(results [「baz」])行上崩潰,這個異常是:EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0)。 – srinivas

1

我在操場嘗試這樣的:

// Playground - noun: a place where people can play 

import UIKit 

var results = ["foo": "fooVar", "bar": "barVar"] 
// ["foo": "fooVar", "bar": "barVar"] 

results["foo"] 
// {Some "fooVar"} 

results["baz"] == nil 
// true 

if results["baz"] 
{ 
    "hi" 
    // not shown 
} 
else 
{ 
    "seems to be working" 
    //shown. 
} 

所以必須有在你的程序別的地方,是造成這一點。

0

由於@Undo在上面的答案中提到過,它確實在函數的後面部分存在問題,並且以不正確的方式拋出異常,JSON數據被解析爲NSDictionary。但不是顯示發生異常的地方,xcode會嘗試追溯該函數,並在函數的出口點顯示異常。

修復JSON解析,刪除了錯誤。最好編寫適當的錯誤處理程序來避免這類問題。

相關問題