ios - 为什么将字典添加到数组时会重复

标签 ios swift nsmutablearray nsmutabledictionary

我是 Swift 的新手,正在尝试。尝试创建一个简单的字典值数组。这很粗糙,但我只是为字典对象复制了一小段代码四次,更改了每个部分中的值,然后将四个中的每一个都添加到数组中。

当我打印数组时,我发现它包含最后一个字典对象的四个版本。怎么可能?我原以为该数组有四个字典对象,即添加的每个对象之一。

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)
}

输出是

(
    {
    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";
    }
)

最佳答案

你错误地一遍又一遍地重复使用 dict。每次都需要创建一个新实例。

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)
}

我不太了解 Swift,所以我可能把语法弄错了。

关于ios - 为什么将字典添加到数组时会重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39540298/

相关文章:

ios - 错误EXC_BAD_ACCESS与scrollViewDidScroll

ios - 检索下一个文本时,字符串逐个字母的动画会混淆

ios - 通过键从 NSMutableArray 中删除对象

ios - 将自定义对象添加到 NSMutableArray

ios - 在 iPhone 模拟器中,如何在带有德语键盘的 macbook 上输入 @ 符号?

ios - 按下表格 View 单元格时如何添加深色?

ios - YTPlayer View在iPhone中无法正常工作

ios - 从 iOS 设备上的 Raspberry Pi 流式传输 H.264 视频

ios - 修改父 View 的框架时自动调整 subview 的大小

ios - 如何将 NSMutableArray 保存到核心数据?