にはAnyObject
が含まれています。それらのうちの1つAnyObject
は、実際にはスイフトアレイです。私はそうのように、配列を変更しようとしている:ディクショナリ内のスワイプ配列を変更する<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]タイプの不変の価値に変異メンバーを使用することはできません私が代わりにスウィフトArray
のNSMutableArray
を使用してみました、それが動作する
(self.dictionary["elements"] as! [Int]).append(10)
、しかし:それを引き起こしました私は、「純粋な」迅速なソリューションがあるかどうかを知りたいと思います。 <String, Array>
タイプの辞書について話している記事がありますが、これはすべての途中でキャストが必要なので、私は自分の問題を解決するとは思わないのです。
アレイを変更する正しい方法は何ですか?
これは基本的にローカルコピー可能です。ユニットテストはこのように失敗します。 – Moshe