2016-09-16 20 views
0

私はSwiftと実験をするのが初めてです。辞書値の単純な配列を作成しようとしています。これはお粗末ですが、辞書オブジェクト用に短いコードを4回複製し、各セクションの値を変更してから、4つをそれぞれ配列に追加しました。辞書を辞書に追加するときに重複する理由

私は配列を印刷するとき、最後の辞書オブジェクトの4つのバージョンが含まれています。どのようにすることができますか?私は4つの辞書オブジェクト、すなわち各オブジェクトの1つが追加されているために配列が期待されていました。

func countDown() { 
    let dict: NSMutableDictionary = [:] 
    let enduroArrayFile = NSMutableArray() 

    dict.setObject(1, forKey: "SectionDistance") 
    dict.setObject("S", forKey: "Direction") 
    dict.setObject(0, forKey: "ArrivalTime") 
    dict.setObject(0, forKey: "AverageSpeed") 
    //saving dictionary to array 
    enduroArrayFile.addObject(dict) 

    dict.setObject(1.2, forKey: "SectionDistance") 
    dict.setObject("S", forKey: "Direction") 
    dict.setObject(0, forKey: "ArrivalTime") 
    dict.setObject(0, forKey: "AverageSpeed") 
    //saving dictionary to array 
    enduroArrayFile.addObject(dict) 

    dict.setObject(2, forKey: "SectionDistance") 
    dict.setObject("R", forKey: "Direction") 
    dict.setObject(0, forKey: "ArrivalTime") 
    dict.setObject(0, forKey: "AverageSpeed") 
    //saving dictionary to array 
    enduroArrayFile.addObject(dict) 

    dict.setObject(2.1, forKey: "SectionDistance") 
    dict.setObject("S", forKey: "Direction") 
    dict.setObject(0, forKey: "ArrivalTime") 
    dict.setObject(0, forKey: "AverageSpeed") 
    //saving dictionary to array 
    enduroArrayFile.addObject(dict) 

    print (enduroArrayFile) 
} 

出力はあなたが誤って何度もdictを再利用している

(
    { 
    ArrivalTime = 0; 
    AverageSpeed = 0; 
    Direction = S; 
    SectionDistance = "2.1"; 
}, 
    { 
    ArrivalTime = 0; 
    AverageSpeed = 0; 
    Direction = S; 
    SectionDistance = "2.1"; 
}, 
    { 
    ArrivalTime = 0; 
    AverageSpeed = 0; 
    Direction = S; 
    SectionDistance = "2.1"; 
}, 
    { 
    ArrivalTime = 0; 
    AverageSpeed = 0; 
    Direction = S; 
    SectionDistance = "2.1"; 
    } 
) 
+3

NSDictionaryは*参照型ですので*。あなたは同じ単独辞書を参照する4つの配列を作成します。 –

+0

代わりにSwiftの値の型を使用することを検討してください:辞書、配列、... –

答えて

4

です。毎回新しいインスタンスを作成する必要があります。

func countDown() { 
    let enduroArrayFile = NSMutableArray() 

    var dict: NSMutableDictionary = [:] 
    dict.setObject(1, forKey: "SectionDistance") 
    dict.setObject("S", forKey: "Direction") 
    dict.setObject(0, forKey: "ArrivalTime") 
    dict.setObject(0, forKey: "AverageSpeed") 
    //saving dictionary to array 
    enduroArrayFile.addObject(dict) 

    dict = [:] 
    dict.setObject(1.2, forKey: "SectionDistance") 
    dict.setObject("S", forKey: "Direction") 
    dict.setObject(0, forKey: "ArrivalTime") 
    dict.setObject(0, forKey: "AverageSpeed") 
    //saving dictionary to array 
    enduroArrayFile.addObject(dict) 

    dict = [:] 
    dict.setObject(2, forKey: "SectionDistance") 
    dict.setObject("R", forKey: "Direction") 
    dict.setObject(0, forKey: "ArrivalTime") 
    dict.setObject(0, forKey: "AverageSpeed") 
    //saving dictionary to array 
    enduroArrayFile.addObject(dict) 

    dict = [:] 
    dict.setObject(2.1, forKey: "SectionDistance") 
    dict.setObject("S", forKey: "Direction") 
    dict.setObject(0, forKey: "ArrivalTime") 
    dict.setObject(0, forKey: "AverageSpeed") 
    //saving dictionary to array 
    enduroArrayFile.addObject(dict) 

    print (enduroArrayFile) 
} 

私はよくわからないので、私は構文が間違っている可能性があります。

+0

ありがとう。あなたはそれを釘付けにした。私は同様の行に沿って考えていましたが、*最初の*辞書の値が最後の値の集合ではなく4回繰り返されることを期待していました。最後のセットを4回見ると、私は完全に混乱しています。どんな考え? – Jeremy

+0

辞書の値は何度も置き換えられています。最後のものが勝つ。 – rmaddy

関連する問題