arrays - 结构体数组中的变量变化

标签 arrays swift struct

我有一个 struct,其中有 2 个变量,类型为 1 - NSDate 2 - NSDateFormatter。然后我有一个数组来存储其中几个结构:

struct Item {
    let prop1 : NSDate
    let prop2 : NSDateFormatter
}

var myItem = [Item]()

var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH-mm-ss-SS"
myItem.append(Item(prop1: myDateThird, prop2: dateFormatter1))

for c in myItem{
    println(c.prop2.stringFromDate(c.prop1))
}

输出:

00:66
<小时/>

到目前为止一切顺利。将 struct 添加到 array 后,我修改了最初添加的 dateFormatter:并将其添加到 array 作为另一个对象。

dateFormatter.dateFormat = "mm-ss-SS"
myItem.append(Item(prop1: myDateThird, prop2: dateFormatter1))

for c in myItem{
    println(c.prop2.stringFromDate(c.prop1))
}

输出:

23:59:56:80
00:00:00:66

当我将第一个 dateFormatter 添加到 array 中后,为什么它的格式会发生变化?我不会修改数组 dateFormatter。我该如何修复它并确保已添加到 array 中的 dateFormatter 不会更改?

最佳答案

结构仅是浅复制的:复制struct不会创建具有类类型的对象的不同实例。 NSDateFormatter 实例是相同的,因此由您的结构共享。您需要创建另一个实例以避免共享。

关于arrays - 结构体数组中的变量变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386397/

相关文章:

java - Java中数组的最大元素

ios - 从 NSManagedObject 获取数据

ios - Apple Watch 上的 UIApplication.sharedApplication().beginIgnoringInteractionEvents()

Java : Testing Array Sum Algorithm Efficiency

ios - 如何在 Swift 3 中将字符串转换为数组

c# - 如何在 C++/CLI 或 C# 中将静态结构数据保存到二进制文件

c - struct allocate C 表

c程序如何打印结构变量保存的char数组?

c++ - 是否有用于从另一个不同的 std::array 初始化 std::array 的特定语法?

ios - 如何在 CollectionView 的组合布局中更改选择颜色