2016-12-31 76 views
0

本質上我試圖從一個數組 - >字典 - >數組 - > Int中獲取整數。我所產生的控制檯錯誤並沒有編譯好,但總是返回0.我認爲我的語法錯了,但我不確定重寫它的正確方法。在Swift中嵌套數組讀取的正確語法?

convenience init(fromDict dict: [String: Any]) { 
    let dfa = dict["forms"] as? Array<Dictionary<String,Array<Any>>> 
    self.init(
     heart: dfa?[0]["abilities"]?[0] as? Int ?? 0 
    ) 
} 

<array> <dict> <key>forms</key> <array> <dict> <key>abilities</key> </array> <integer>65</integer> </array>

+0

做的就是看是否'dfa'本身的第一件事是'nil'。是嗎? – matt

+0

當我刪除'?'s時,dfa給了我斷點錯誤。它不應該像我在數據源中看到的變量 – user4938361

+0

您可以看到該變量,但它可能沒有'[「forms」]'條目,如果是這樣,那麼該條目的值可能不是' Array >>'。你有看到?儘管如此,你還沒有顯示出「dict」由什麼組成。你把所有事情都保密,所以沒人能幫你。這就是爲什麼我給你指示你自己想想這個問題。 – matt

回答

0

你的語法看起來挺合我,但我會建議把內部數組包含Int而不是Any如果它總是包含整數。這樣你就可以失去最後的轉換爲Int類型。

如果你的任何一個條件轉換失敗,那麼你會得到零,而零合併運算符會將你的零轉換爲0.我建議編寫調試代碼記錄傳遞到你的init方法的對象,然後投射一個一次一件,並逐步查看它失敗的地方。

(馬特在他的評論中說,如果第一個條件轉換失敗,你dfa變量將是零。)

+0

強力展開給我EXC BREAKPOINT。但是當變量在指定位置時,爲什麼它會變爲零? – user4938361

+0

'as?'是一個條件轉換,返回一個包含正確類型的opional,如果轉換失敗,則返回nil。這聽起來像你的對象圖中的某些東西與你期望的類型不匹配,所以演員陣容失敗了。 (不要強制解開。) –

+0

用plist源更新帖子(如果有幫助的話)。我找不到這個問題的根源 – user4938361