爲了渲染鬍鬚模板而將數據有效載荷傳遞到GRMustache.swift,我處於需要將數據追加到之前在字典中定義的數組的場景。在[String:Any]字典結構中追加到數組
我的數據結構開始瞭如:
var data: [String: Any] = [
"key1": "example value 1",
"key2": "example value 2",
"items": [
// I need to append here later
]
]
的items
密鑰對的集合,我需要一個循環內後追加。
爲了增加data["items"]
陣列,我想是這樣的:
for index in 1...3 {
let item: [String: Any] = [
"key": "new value"
]
data["items"].append(item)
}
這個錯誤,Any?
類型的值沒有成員append
,和二元運算+=
不能應用於Any?
類型的操作數和[String : Any]
。
這是有道理的,因爲我需要將值追加;然而,我不能改變數組。
鑄造到陣列中,是否迫使垂頭喪氣給出了錯誤:
(data["items"] as! Array).append(item)
'Any?' is not convertible to 'Array<_>'; did you mean to use 'as!' to force downcast?
Cannot use mutating member on immutable value of type 'Array<_>'
好像我的演員是錯誤的;或者,也許我會以錯誤的方式解決這個問題。
任何有關如何隨着時間的推移迭代填寫data["items"]
的建議?
@JasonSturges我知道,我剛纔告訴你什麼是問題,在那裏你可以直接追加字典內的數組。 –
真的很感謝'[String:[[String:Any]]]的輸入的清晰度和優雅。 –
請注意,您可以使用'data [「items」] ?. append(item)'而不是'data [「items」]!。append(item)''above;如果碰巧沒有''items''鍵的值(即使我們知道它在這個例子中),後者會產生運行時崩潰,而前者將簡單地返回一個未使用的'nil'。即使我們知道「項目」鍵存在,我相信我們應該更喜歡安全的方法,特別是當它沒有額外成本時。對於初學者來說,總是有一種加強壞習慣的風險,那麼在這種特殊情況下,例如'!'是安全的,否則通常不會。 – dfri