我有一個Dictionary
其中有AnyObject
s。其中AnyObject
s實際上是一個Swift數組。我試圖修改數組,像這樣:修改字典中的Swift數組<String,AnyObject>
class MyClass {
internal(set) var dictionary : Dictionary<String, AnyObject>
init() {
self.dictionary = [
"displayName": "Foo", //String : String
"elements" : [] // String : Array
]
}
// ...
func addNumber(number : Int) {
// Something here
}
}
這裏是我此代碼單元測試:
func testAddNumber() {
let foo = MyClass()
let beforeCount = foo.dictionary["elements"].count
foo.addNumber(10)
let afterCount = foo.dictionary["elements"].count
XCTAssert(beforeCount + 1 == afterCount, "Count was \(afterCount)")
}
我試着拔出陣列並將其分配給一個臨時變量,但是這個項目實際上並沒有被添加到鍵入elements
的數組中。
var elements = (self.dictionary["elements"] as! [Int])
elements.append(10)
此代碼運行,但是當我跑我的單元測試,以檢查是否被添加的元素,測試失敗。
如果我不使用中間分配,我得到一個編譯錯誤約易變性:
無法在類型的不可變的值使用可變成員[FormGroup]
這裏的代碼,導致它:
(self.dictionary["elements"] as! [Int]).append(10)
我嘗試使用NSMutableArray
而不是斯威夫特Array
,那工作,但我想知道是否有「純粹」的Swift解決方案。有一些帖子提到類型爲<String, Array>
的字典,但這需要將其全部投入中間,所以我不認爲它們解決了我的問題。
什麼是修改數組的正確方法?
這實質上是一個本地可變副本。單元測試以這種方式失敗。 – Moshe