将新项追加到Swift 2.0中的类数组中

时间:2015-12-08 12:08:49

标签: ios swift class append swift2

这让我发疯了。我用"追加"所有的时间,但这次我真的无法找到问题。每当我向数组添加一个新项时,所有元素都保持不变,等于最后一个附加元素。 我错过了什么?我相信它一定很简单......

  var MyDatabase : [MyClass] = []

    class MyClass : NSObject {
        var x : String = ""
    }

    let Item = MyClass()
    for (var i = 0 ; i < 5 ; i++){

        Item.x = "\(i)"
        MyDatabase.append(Item)
        print(MyDatabase.first!.x) // it shows 0,1,2,3,4 and it should always be "0"
    }
    for (var i = 0 ; i < MyDatabase.count ; i++){
    print(MyDatabase[i].x) // it shows 4,4,4,4,4 and it should be 0,1,2,3,4
    }

1 个答案:

答案 0 :(得分:4)

因为,Swift Class是引用类型,你只需要添加5个指向同一个对象的引用

将其更改为此以创建5个对象

class MyClass : NSObject {
    var x : String = ""
}

var MyDatabase : [MyClass] = []

for (var i = 0 ; i < 5 ; i++){
    let Item = MyClass()
    Item.x = "\(i)"
    MyDatabase.append(Item)
}
print(MyDatabase.first!.x) // 0

Swift结构是值类型,

struct MyClass {
    var x : String = ""
}

var MyDatabase : [MyClass] = []
var Item = MyClass()

for (var i = 0 ; i < 5 ; i++){
    Item.x = "\(i)"
    MyDatabase.append(Item)
    print(MyDatabase.first!.x) // 0 0 0 0 0 
}